quickSort(int[] arr, int left, int right) 参数描述
排序步骤:
right > left 条件前提下:如果
节点数据 > pivot继续向左移动
如果节点数据 <= pivot则把当前节点的数据赋值到 left 节点, 然后停止右边遍历, 开始左边遍历
left > right 条件前提下:如果
节点数据 < pivot继续向右移动
如果节点数据 >= pivot则把当前节点的数据赋值到 right 节点, 然后停止左边遍历, 开始右边遍历
对左数组递归调用执行 1,2,3 步骤
对右数组递归调用执行 1,2,3 步骤
public static void main(String[] args) {
int[] arr = {5, 3, 8, 5, 4, 2};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后的数组:" + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
// 选取最左边的元素作为枢轴
int pivot = arr[left];
int i = left;
int j = right;
while (i < j) {
// 先从右边开始找小于枢轴的元素
while (i < j && arr[j] >= pivot) {
// 如果没有找到, 就继续往左边找
j--;
}
// 在右边找到小于枢轴的元素后, 将其赋值给左边位置的元素
arr[i] = arr[j];
// 然后从左边开始找大于枢轴的元素
while (i < j && arr[i] <= pivot) {
// 如果没有找到, 就继续往右边找
i++;
}
// 在左边找到大于枢轴的元素后, 将其赋值给右边位置的元素
arr[j] = arr[i];
}
// 当 left == right 时, 把 pivot 赋值给 arr[i] arr[i] = pivot;
// 递归调用
// 对 pivot 位置左边进行快速排序
quickSort(arr, left, i - 1);
// 对 pivot 位置右边进行快速排序
quickSort(arr, i + 1, right);
}