最优快速排序
[核心思路] 定义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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步