以某数为基点数,分为两个区间,左右区间继续拆分,直到每个区间只有一个数
public static void main(String[] args) {
int[] arr = {12,14,16,15,13,18,11,17,10,3,6,7,2,8,9,20};
quickSort(arr,0,arr.length-1);
System.out.println("排序完成");
}
private static void quickSort(int[] arr, int start, int end) {
if(start < end){
//把首位数字作为基准数
int jz = arr[start];
//需要排序的数字
int low = start;
int high = end;
//排序范围内与基准数比较
//升序
/* while (low < high){
//右边数大于基准数
while (low < high && arr[high] >= jz){
high --;
}
//右边数替换左边数
arr[low] = arr[high];
//左边数小于基准数
while (low < high && arr[low] <= jz){
low++;
}
//左边数替换右边数
arr[high] = arr[low];
}
//把最大小数作为基准数
arr[low] = jz;
//处理所有小数
quickSort(arr,start,low);
//处理所有大数
quickSort(arr,low+1,end);*/
//降序
while (low < high){
//右边数小于基准数
while (low < high && arr[high] <= jz){
high --;
}
//右边数替换左边数
arr[low] = arr[high];
//左边数大于基准数
while (low < high && arr[low] >= jz){
low++;
}
//左边数替换右边数
arr[high] = arr[low];
}
//把最小大数作为基准数
arr[high] = jz;
//处理所有大数
quickSort(arr,start,low);
//处理所有小数
quickSort(arr,low+1,end);
}
}