public static void sort(int[] arrs, int start, int end){
int i = start; //数组开始
int j = end; //数组结束
int k = start; //基值下标位置,一般取第一个值好了,运气值
int mid = arrs[k]; //基值,小的左边,大的右边
boolean flag = true; //从小到大比较还是从大到小比较的标识,为true时从大到小比较,找到比基值小的
while(i != j){
if(flag){
if(arrs[j] < mid){
arrs[k] = arrs[j];
arrs[j] = mid;
k = j;
flag = false; //找到比基值小的,则将基值与当前值换位,接下去换方向找比基值大的
System.out.println("mid["+mid+"]-start["+start+"]-end["+end+"] "+Arrays.toString(arrs));
continue;
}
j--; //直接找到一个比基值小的
} else {
if(arrs[i] > mid){
arrs[k] = arrs[i];
arrs[i] = mid;
k = i;
flag = true; //找到比基值大的,则将基值与当前值换位,接下去换方向找比基值小的
System.out.println("mid["+mid+"]-start["+start+"]-end["+end+"] "+Arrays.toString(arrs));
continue;
}
i++; //直接找到一个比基值大的
}
}
if(k-1>start){
sort(arrs, start, k -1);//将基值左边的递归,直到基值左边没有只有一个元素或没有元素
}
if(k+1 < end){
sort(arrs, k + 1, end); //将基值右边的递归,直到基值右边没有只有一个元素或没有元素
}
}
快递排序示例:
[26, 4, 23, 20, 45]
[20, 4, 23, 26, 45]
[4, 20, 23, 26, 45]