static void f(int[] x, int left, int right)
{
if(left >= right) return;
int key = x[(left+right)/2];
int li = left;
int ri = right;
while(li<=ri){
while(x[ri]>key) ri--;
while(x[li]<key) li++;
if(li<=ri){ //填空
int t = x[li];
x[li] = x[ri];
x[ri] = t;
li++;
ri--;
}
}
if(li < right) f(x, li, right);
if(ri > left) f(x, left, ri);
}
与普通快排不同,他的基准可以选择任意位置
下面自己实现的快排
public static int QuikSortOnce(int []arr,int left,int right){
int x = arr[left];//确定基准
while(left<right)//如果left!=right说明没排玩 如果left == right说明找到了中间位置
{
while(left<right&&arr[right]>x) right--;
System.out.println("right:"+right);
if(left<right){
arr[left] = arr[right];
left++;
}
while(left<right&&arr[left]<x) left++;
System.out.println("left:"+left);
if(left<right){
arr[right] = arr[left];
right--;
}
}
arr[left] = x;
return left;
}
public static void QuickSort(int arr[],int left,int right){
if(left<right){
int pos = QuikSortOnce(arr, left, right);
QuickSort(arr, left, pos-1);
QuickSort(arr, pos+1,right);
}
}
public static void main(String[] args) {
int arr [] = new int []{2334,354,6345,6124,871,62,51};
QuickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}