快速排序大家都很熟悉了
大概讲一下流程
3,4,5,1,7,6,2
第一轮排序
基准为3
第一次交换
3,2,5,1,7,6,4
第二次交换
3,2,1,5,7,6,4
第三次交换
1,2,3,5,7,6,4
。。。
以此类推
代码:
// 快排
public static void sort(int[] arr, int left, int right){
if(left > right){
return;
}
// 基准
int index = arr[left];
int l = left;
int r = right;
while(left != right){
// 找到比基准小的数
while(arr[right] >= index && left < right){
right --;
}
// 找到比基准大的数
while(arr[left] <= index && left < right){
left ++;
}
// 交换一下值
if(arr[left] > arr[right]){
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
// 交换基准和指针指到的值
arr[l] = arr[left];
arr[left] = index;
sort(arr, l, left -1);
sort(arr, right + 1, r);
}