// 不稳定排序算法:快希堆不稳定
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 2, 9, 3, 8, 4, 0, 1, 6, 7};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
// 快速排序
private static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pivot = getPivot(arr, left, right);
// 递归左侧
quickSort(arr, left, pivot - 1);
// 递归右侧
quickSort(arr, pivot + 1, right);
}
}
// 获取基准索引
private static int getPivot(int[] arr, int left, int right) {
// 1、 选取【第一个元素值】作为【基准元素】
int pivotVal = arr[left];
// 2、 遍历
while (left < right) {
// 3、 当【右侧元素】 比 【基准元素】 大,就【往前走】
while (left < right && arr[right] >= pivotVal) {
right--;
}
// 否则 【左侧元素】 比 【基准元素】 大,【交换】低位和高位元素(找到高位 < 基准,左侧=高位)
arr[left] = arr[right];
// 4、当【左侧元素】 比 【基准元素】 小,就【往后走】
while (left < right && arr[left] <= pivotVal) {
left++;
}
// 否则 【左侧元素】 比 【基准元素】 大,【交换】低位和高位元素(找到低位 > 基准,右侧=高位)
arr[right] = arr[left];
}
// 5、重新放置基准值。基准元素放到最终位置,并返回【基准元素】的【索引】
arr[left] = pivotVal;
return left;
}
}
快速排序-算法模板
于 2018-05-11 10:59:04 首次发布