首页 > 代码库 > Java排序算法之快速排序
Java排序算法之快速排序
基本过程:
- 设置两个变量i、j,排序开始的时候:i=0,j=N-1;
- 以第一个数组元素作为关键数据,赋值给key,即key=a[0];
- 从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
- 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
- 重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止)。
代码实现:
public class KuaiSu { public static void main(String []args){ int[] a = {12,20,5,16,15,1,30,45,23,9}; int low = 0; int high = a.length-1; paixu(a,low,high); for(int i = 0; i<a.length; i++){ System.out.print(a[i]+","); } } public static void paixu(int[] a,int low,int high){ if(low<high){ int key = sort(a,low,high); paixu(a,low,key-1); paixu(a,key+1,high); } } public static int sort(int[] a,int low,int high){ int key = a[low]; while(high>low){ //从后往前比较 while(high>low&&a[high]>=key){ //若大于key移动位置 high--; } a[low]=a[high]; //不大于,交换两个值 //从前往后比较 while(high>low&&a[low]<=key){ //若小于key移动位置 low++; } a[high]=a[low]; //不小于,交换两个值 } a[low]=key; return low; } }
算法性能分析:
时间复杂度:快速排序最坏的时间复杂度为O(n^2),平均时间复杂度为O(nlogn)。
空间复杂度:O(n)。
稳定性:由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。
Java排序算法之快速排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。