/**
* 快速排序<br>
* 快速排序是一种常用的排序算法,其基本思想是选取一个数作为基准值,然后将数组中小于等于基准值的数放在左边,<br>
* 大于基准值的数放在右边,再对左右两边的子数组分别进行排序
*
* @param arr
*/
public static void quickSort(int[] arr) {
quickSort(arr, 0, arr.length - 1);
}
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
// 选取基准值
int pivotIdx = partition(arr, left, right);
// 对左边子数组进行排序
quickSort(arr, left, pivotIdx - 1);
// 对右边子数组进行排序
quickSort(arr, pivotIdx + 1, right);
}
}
public static int partition(int[] arr, int left, int right) {
// 选取第一个数作为基准值
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j) {
while (i <= j && arr[i] <= pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i <= j) {
// 交换arr[i]和arr[j]的值
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准值和arr[j]的值交换
int temp = arr[left];
arr[left] = arr[j];
arr[j] = temp;
return j;
}
public static void main(String[] args) {
int[] arr = new int[] { 4, 3, 2, 5, 12, 6, 8, -1, 55, 67, 54, 23 };
quickSort(arr);
System.out.println(Arrays.toString(arr));
}