import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {4, 34, 19, 1, 9 ,-1};
System.out.println("排序前为:" + Arrays.toString(arr));
quickSort(arr, 0 ,arr.length - 1);
System.out.println("排序后为:" + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int start, int end) {
// 防止栈溢出,递归结束的条件:start = end,此时划分的子数组长度为1
if (start < end) {
// 数组中第0个数字为基准数
int base = arr[start];
int low = start;
int high = end;
// 循环寻找:左侧比基准数大的,右侧比标准数小的
while (low < high) {
// 从右往左
while (low < high && arr[high] >= base) {
high--;
}
arr[low] = arr[high];
// 从左往右
while (low < high && arr[low] <= base) {
low++;
}
arr[high] = arr[low];
}
// 代码进行到这里,low = high,把基准数放在中间的位置
// 此时左边的数比基准数小,右边的数比基准数大
arr[low] = base;
// 递归,对基准数两侧执行同样的操作
quickSort(arr, start, low);
quickSort(arr, low + 1, end);
}
}
}