java实现快速排序
背景
原理参考:快速排序原理
代码如下:
主要看quickSort(int[] arr, int low, int high)
和quickPass(int[] arr, int low, int high)
部分
package com.david.learn.algorithm.base;
// 快速排序
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
// 递归出口
if (arr == null || low > high) {
return;
}
int pivot = quickPass(arr, low, high);
// 对pivot左边子数组排序
quickSort(arr, low, pivot - 1);
// 对pivot右边子数组排序
quickSort(arr, pivot + 1, high);
}
// 一趟排序算法
public static int quickPass(int[] arr, int low, int high) {
// pivotValue基准值
int pv = arr[low];
while (low < high) {
// 先从右边往左查找比基准值(pv)小的记录
while (low < high && arr[high] >= pv) {
high--;
}
// 找到后交换到左端(low)
arr[low] = arr[high];
// 再从左边往右查找比基准值(pv)大的记录
while (low < high && arr[low] <= pv) {
low++;
}
// 找到后交换到右端(high)
arr[high] = arr[low];
}
// 扫描完成,基准值枢纽(pv)到位
arr[low] = pv;
// low的位置就是基准值在数组的最终排序位置
return low;
}
public static void main(String[] args) {
int[] arr = initArr();
printArr(arr);
quickSort(arr, 0, arr.length - 1);
printArr(arr);
}
// 初始化待排序数组
public static int[] initArr() {
return new int[]{8, 88, 9, 90, 23, 4, 15};
}
// 遍历数组
public static void printArr(int[] arr) {
if (arr == null) {
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i == arr.length - 1) {
continue;
}
System.out.print("->");
}
System.out.println();
}
}