快速排序由 Tony Hoare 於 1960 年代提出,屬於分治法經典演算法,平均時間複雜度 O(n log n),且同階複雜度下實際運行速度最快,被譽為「二十世紀十大演算法」之一。

import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arrays = {1, 12, 2, 13, 3, 14, 4, 15, 5, 16, 17, 17, 177, 18, 8, 8, 19};
new QuickSort().quickSort(arrays);
System.out.println(Arrays.toString(arrays));
}
public void quickSort(int[] arrays) {
subQuickSort(arrays, 0, arrays.length - 1);
}
private void subQuickSort(int[] arrays, int start, int end) {
if (start >= end) return;
int middleIndex = partition(arrays, start, end);
subQuickSort(arrays, start, middleIndex - 1);
subQuickSort(arrays, middleIndex + 1, end);
}
private int partition(int[] arrays, int start, int end) {
int pivot = arrays[start];
while (start < end) {
while (arrays[end] >= pivot && start < end) end--;
arrays[start] = arrays[end];
while (arrays[start] <= pivot && start < end) start++;
arrays[end] = arrays[start];
}
arrays[start] = pivot;
return start;
}
}
partition 使用雙指針法,原地交換,空間複雜度 O(log n)(遞迴棧)。O(n²),生產環境建議採用「三數取中」或隨機基準值優化。