您的位置:首页 > 其它

快速排序

2016-05-28 14:38 232 查看
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法介绍:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

package javaTest;

public class Quicksort {

public static void main(String[] args) {
int[] a=new int[] {49,38,65,97,76,13,27};
sort(a,0,6);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}

private static void sort(int[] a, int low, int high) {
if(low < high){   //递归的终止条件,一定要判断,否则会栈溢出
int i=low;
int j=high;
int key=a[i];  //第一个数组元素作为关键数据,赋值给key,即key=a[0]
while(i<j){
while(i<j && a[j]>=key){ //从j开始向前搜索
j--;
}
a[i]=a[j]; //找到第一个小于key的值a[j],将a[j]和a[i]互换
while(i<j && a[i]<=key){ //从i开始向后搜索
i++;
}
a[j]=a[i]; //找到第一个大于key的a[i],将a[i]和a[j]互换
}
a[i]=key;
//第一遍快速排序不会直接得到最终结果,只会把比key大和比key小的数分到key的两边。
//需要再次对两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。
sort(a, low, i-1);
sort(a, i+1, high);
}
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 算法 递归