LeetCode--快速排序
文章目录
- 1 排序原理
- 2 代码实现
1 排序原理
quickSort(int[] arr, int left, int right)
参数描述
- arr: 待排序的数组
- left: 排序的左边位置
- right: 排序的右边位置
排序步骤:
- 先选取左边节点的数据作为 pivot
- 从右边开始, 向左遍历节点数据, 在满足
right > left
条件前提下:
如果
节点数据 > pivot
继续向左移动
如果节点数据 <= pivot
则把当前节点的数据赋值到 left 节点, 然后停止右边遍历, 开始左边遍历
- 从左边开始, 向右遍历节点数据, 在满足
left > right
条件前提下:
如果
节点数据 < pivot
继续向右移动
如果节点数据 >= pivot
则把当前节点的数据赋值到 right 节点, 然后停止左边遍历, 开始右边遍历
- 当 left 和 right 重合后, 此次遍历结束, 把 pivot 赋值到重合节点, pivot节点左边为左数组, 右边的为右数组
对左数组递归调用执行 1,2,3 步骤
对右数组递归调用执行 1,2,3 步骤
- 完成快速排序
2 代码实现
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);
}