前言
快速排序法,是一种速度较快的排序法,实现原理为:每次选择一个基准值(一般选择第一个值),然后把数据分割为2部分,第一部分:小于等于基准值的所有值,第二部分:大于大于基准值的所有值,即每次迭代排序在最佳情况下都可以均分数组,时间复杂度为O(n * log n)
快速排序法
代码实现:
public class QuickSort {
public static void main(String[] args) {
int[] array = new int[]{3, 2, 5, 1, 3, 2, 5, 4, 6, 73, 3, 7};
quickSort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
public static void quickSort(int[] arr, int start, int end) {
int i = start;
int j = end;
int first = arr[start];
while (i < j) {
// 从后往前找到第一个小于基准值的索引,直到找到或者i=j,大循环结束
while (i < j && arr[j] >= first) {
j--;
}
// 从前往后找到第一个大于等于基准值的值
while (i < j && arr[i] <= first) {
i++;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 基准值和i互换
arr[start] = arr[i];
arr[i] = first;
if (i > start) {
quickSort(arr, start, i - 1);
}
if (i < end) {
quickSort(arr, i + 1, end);
}
}
}