本次笔记内容:
10.1.1 算法概述
10.1.2 选主元
10.1.3 子集划分
10.1.4 算法实现
算法概述
思想是“分而治之”,也是用递归手法实现。
如上图,选出一个数“65”,将大于其和小于其的部分分而治之,递归下去。
其伪码如上图。其主元、分为两个独立子集这两个步骤需要很好的设计,不然可能使快排事倍功半。
快排最好的情况:每次正好中分, T ( N ) = O ( N log 2 N ) T(N)=O(N \log_2 N) T(N)=O(Nlog2N)。
选主元
主元(pivot)的选择方法对运行效率影响很大。
比较常用的方法是:取头、中、尾3个位置的中位数。
ElementType Median3(ElementType A[], int Left, int Right)
{
int Center = (Left + Right) / 2;
if (A[</