快速排序算法的实现(递归)
package com.dequ;
import java.util.Arrays;
public class TestQuickSort {
private static void quickSort(int[] arr, int low, int high) {
if (low<high) {
// 分区操作,分成两个区,返回分区
int index = partition(arr, low, high);
// 对做分区快排
quickSort(arr, low, index - 1);
// 对右分区快排
quickSort(arr, index + 1, high);
}
}
public static void quickSort(int[] arr) {
int low = 0;
int high = arr.length - 1;
quickSort(arr, low, high);
}
private static int partition(int[] arr, int low, int high) {
// 指定左指针i和右指针j
int i = low;
int j = high;
// 将第一个坑作为基准值,挖坑
int x = arr[low];
// 使用循环实现分区
while (i < j) {
// 从右向找第一个小于基准值的值arr[j]
while (arr[j] > x && i < j) {
j--;
}
// 将右侧找到的小于基准值的数填到左边坑中 ,i++,向中间移动一个位置。
if (i < j) {
arr[i] = arr[j];
i++;
}
// 从左向右找第一个大于等于基准值的值arr[i]
while (arr[i] < x && i < j) {
i++;
}
// 将左侧找到的大于等于基准值的数填到右边坑中 ,j--,向中间移动一个位置。
if (i < j) {
arr[j] = arr[i];
j--;
}
}
// 使用基准值填坑,这就是基准的最终位置
arr[i] = x;
// 返回基准值的索引位置
return i;
}
public static void main(String[] args) {
// 创建一个数组
int[] arr = { 7, 35, 45, 12, 85, 27, 49, 35, 29 };
// 输出数组
System.out.println(Arrays.toString(arr));
// 数组排序
quickSort(arr);
// 输出排序后的数组
System.out.println(Arrays.toString(arr));
}
}