快排总结:分区方法(3个while),递归使用排序方法。 使用了分治法!!!挖坑赋值法!!!
package cn.com;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int arr[] = {8,3,2,5,4,7,6,1};
int low = 0;
int high = arr.length - 1;
qsort(arr,low,high);
System.out.println(Arrays.toString(arr));
}
private static void qsort(int[] arr,int low,int high){
if (low < high) {
int position = partion(arr, low, high);
qsort(arr, low, position - 1);
qsort(arr, position + 1, high);
}
}
private static int partion(int[] arr,int low,int high){
int baseVal = arr[high];
while (low < high){
while (low < high && arr[low] < baseVal){
low++;
}
arr[high] = arr[low];//arr[low]比基准值小,则不管它,比基准值大,则赋给此时的arr[high]
while (low < high && arr[high] >= baseVal){
high--;
}
arr[low] = arr[high];
}
arr[low] = baseVal;
return low;
}
}
总结:partion这个函数,是分区的函数,返回值是基准值排序后的下标
代码中,先将BaseVal设为arr[high]的值,然后将左边的大值赋到arr[high]上,将右边的小值赋到刚才的左边大值位置上,然后逐步向中央逼近。最后将BaseVal补中间的那个窟窿。
分区方法中,使用了3个while。
参考文献:https://blog.csdn.net/MuErHuoXu/article/details/85268039
https://www.jianshu.com/p/e4369c66d4a5
https://blog.csdn.net/qq_41247642/article/details/88967851