最优快速排序
[核心思路] 定义f=数组的最后一个元素 使用双指针,左指针永远指向《比f大的最后一个元素的前一个》,右指针永远指向《比f大的第一个元素的前一个》当 [ r<f ] 时 左指针自加1 并且与r交换位置,右指针从开始位置遍历到结束位置,遍历结束后 交换 l+1 与 r 的元素;
public static void quickSort(int[] arr,int start,int end){
//代码核心逻辑
if(start<end){
int q = partition(arr,start,end);
quickSort(start,q-1);
quickSort(q+1,end);
}
}
public static void partition(int[] arr,int start,int end){
int f = arr[end];
//左指针
int l = start-1;
for(int r = start ; r < end ; i++){
if(arr[r]<f){
l+=1;
swap(arr,l,r)
}
}
swap(arr,l+r,end);
return l+1;
}
public static void swap(int[] arr,int l,int r){
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}