代码实现
package com.atguigu.sort;
import java.util.Arrays;
/**
* @author WHT
* @create 2021-06-22 16:29
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {-9, 78, 0, 23, -567, 70};
quickSort(arr, 0, arr.length - 1);
System.out.println("arr=" + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right) {
int l = left;
int r = right;
int pivot = (l + r) / 2; // pivot 中轴值。
// while循环的目的是让比 pivot 值小的放到左边,
// 比 pivot 值大放到右边。
while (l < r) {
// 在pivot的左边一直找,找到大于等于pivot值,才退出。
while (arr[l] < arr[pivot]) {
l++;
}
// 在pivot的右边一直找,找到小于等于pivot值,才退出。
while (arr[r] > arr[pivot]) {
r--;
}
//如果 l==r 说明 pivot 的左右两边的值,已经按照左边全部是
//小于等于pivot值,右边全部是大于等于pivot值。
if (l == r) {
break;
}
// 交换。
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
// 向左递归。
if (left < pivot) {
quickSort(arr, left, pivot - 1);
}
// 向右递归。
if (right > pivot) {
quickSort(arr, pivot + 1, right);
}
}
}