原理简介
快速排序原理即是,选择数组中的一个元素作为基准值 pivot(通常使用第一个就行),然后遍历其他元素,将小于 pivot 的元素放置在左边,将大于 pivot 的元素放置在右边。如是你可以得到两个子数组,再依次对子数组进行快速排序,最终完成排序。
时间复杂度
快速排序比选择排序快得多,其时间复杂度为 O(n * lg n),是最快的排序算法之一。最糟糕的情况下,快速排序的时间复杂度为 O(n^2)。
代码实现
Java 的快速排序示例如下:
public class Main {
public static void main(String[] args) {
int[] arr = new int[] { 5, 4, 8, 6, 3, 9, 0, 1, 7, 2 };
quickSort(arr, 0, arr.length - 1);
printArray(arr);
}
public static void quickSort(int[] arr, int start, int end) {
if (end <= start) {
return;
}
int low = start;
int high = end;
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high]; // 将小于 pivot 的数放在地位
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low]; // 将大于 pivot 的数放在高位
}
arr[low] = pivot;
quickSort(arr, start, low - 1); // 递归排序左半部分
quickSort(arr, low + 1, end); // 递归排序右半部分
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
执行结果为:
0 1 2 3 4 5 6 7 8 9