-
基本算法
- 代码
- 切分方法
- 性能特点
-
算法改进
- 切换到插入排序
- 三取样切分
- 针对重复元素的优化-三向切分
本节将要学习的快速排序,可以说是应用最广泛的排序算法了,很多语言如Java、C#的系统排序采用的便是快速排序。快速排序实现简单,而且适用于各种不同的输入数据,且在一般的应用中比其他排序算法都要快得多。快速排序与前面几种排序算法相比其优势在于,它不仅是原地排序算法(只需要一个很小的辅助栈),而且将长度为N的数组排序所需的时间和NlgN成正比,而之前的几种算法都无法兼具这两个特点。归并排序虽然速度也很快,但它的空间成本却是线性增长的。
快速排序是由C.A.R Hoare在1960年发明的,被誉为20世纪十大算法之一,Hoare本人也因快速排序和其它计算机科学方面的成就而获得1980年的图灵奖。
基本算法
快速排序是一种基于分治的排序算法,它的基本思想是将数组分为两半,使左边的一半总是小于某个元素,右边的一半总是大于某个元素,这一过程不断递归下去,直到整个数组变得有序。
代码
代码如下:
public class Quick {
public static void sort(Comparable[] a) {
StdRandom.shuffle(a);
sort(a, 0, a.length - 1);
}
private static void sort(Comparable[] a, int lo, int hi) {
if (lo >= h