快排(Quicksort)
- 分治算法
- 原地排序(就在原来的数据区域内进行重排,像插入排序,在原来的区域完成排序,归并排序额外的空间进行排序)
分治
- 分,快速排序将数据划分为几份,所以快排通过选取一个关键数据,再根据它的大小把原数据分为两个子数组(第一个数组的元素都比这个主元素小,第一个数组的元素都比这个主元素大或相等)
- 治,用递归处理两个子数组的排序
- 合并,连接
( A , p , q ) (A,p,q) (A,p,q)
定义 ( A , p , q ) (A,p,q) (A,p,q)算法,表示从元素p到元素q的快速排序,输出结果为将小于主元素(位置p的元素)排在主元素之前,将大于等于主元素(位置p的元素)排在主元素之后。
( A , p , q ) (A,p,q) (A,p,q)例子
Pseudocode for quicksort
快排分析
- 假设元素都不相同
- 当有重复元素的时候也可以运行,但有更好的算法
- 最坏情况分析
- 每次主元素都是大于或者小于其他元素, T ( n ) = T ( 0 ) + T ( n − 1 ) + Θ ( n ) = Θ ( 1 ) + T ( n − 1 ) + Θ ( n ) = T ( n − 1 ) + Θ ( n ) = Θ ( n 2 ) T(n)=T(0)+T(n-1)+\Theta(n)=\Theta(1)+T(n-1)+\Theta(n)=T(n-1)+\Theta(n)=\Theta(n^2) T(n)=T(0)+T(n−