public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[]{66, 2, 4, 1, 6, 77, 3, 2, 21, 56, 10};
System.out.println("原先的数组:" + Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println("最终排序的结果:" + Arrays.toString(arr));
}
public static void quickSort(int[] num, int low, int high) {
if (num.length <= 0) return;
if (low >= high) return;
int left = low;
int right = high;
int temp = num[left]; //设置temp为中心数
while (left < right) {
//顺序很重要,先从右往左找
while (left < right && num[right] >= temp) { //从后向前找到比基准小的元素,插入到基准位置坑1中
right--;
}
//每次找完后交换左右哨兵的位置
num[left] = num[right];
while (left < right && num[left] <= temp) { //从前往后找到比基准大的元素,放到刚才挖的坑2中
left++;
}
//每次找完后交换左右哨兵的位置
num[right] = num[left];
}
num[left] = temp; //最终将中心数归位
System.out.println("排序:" + Arrays.toString(num));
//因为每趟中对表的操作都一样,所以再进行完一趟之后可以采用递归的方法
quickSort(num, low, left - 1);
quickSort(num, left + 1, high);
}
}
结果如下