您的位置:首页 > 其它

基础算法-快速排序

2017-02-23 19:05 218 查看

快速排序

选择一个基准值x,把比x小的全部放在左边,把大于等于x的值放在右边,然后把x放到这个边界.

这样,如果左边是升序的,那么因为x比左边的都大,左边区间加上x 的这个区间同样是升序的,如果此时右边也是升序的,

那么因为x的值小于等于右边的值,则整个数组是升序的

而每个区间的排序,可以递归调用快速排序完成,如果区间只有一个值就不用排序了。

public class QuickSort {

public static void quickSort(int a[],int l,int r){

if(l<r){//递归出口

int i=l,j=r,x=a[i];//选定第一个元素为基准

while (i<j){

while (i<j&&a[j]>=x)//第一个小于x的值
j--;
if(i<j)
a[i++]=a[j];//小于x的值全部放在左边 (i++好像也没有必要,
// 因为到下面的话,这个值肯定是小于x的,再下面的那个while 中自然会+1
while (i<j&&a[i]<x)//第一个大于等于x的值
i++;
if(i<j)
a[j--]=a[i];//大于等于x的值全部放在右边,(j--同样也没有什么必要)
}
a[i]=x;//正好停留的位置为左边小于x,右边大于等于x
quickSort(a,l,i-1);//递归快排左边
quickSort(a,i+1,r);//递归快排右边

}

}

public static void main(String[]args){

int a[]=new int[100];
SortUtil.randomArray(a);
SortUtil.print(a);
quickSort(a,0,a.length-1);
SortUtil.print(a);

}

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