《算法导论》第7章 快速排序 (四种变形)
2012-02-24 23:19 htc开发 阅读(249) 评论(0) 编辑 收藏 举报
这一章的正文及思考题部分讲到了快速排序及其几种变形,包括:Hoare快排,
普通快排,随机快排,三数取中快排。
这些快排的区别主要是划分方法PARTITION算法的不同:如何选取主元,划分出的
两部分范围是什么。根据划分出的范围不同,各变形的QUICKSORT有微小的差别。
1. Hoare快排
Hoare划分是最初的版本,与《算法导论》中的划分版本相比,它选取第一个元素A[p]为主元。
划分后的两部分是:A[p..j]和A[j+1..r],主元可能放入某一个之中。
2. 普通快排
选取最后一个元素A[r]为主元后,j 从头遍历到尾,i 是两范围的分隔。
划分结果为[p, q - 1]和[q + 1, r]。
3. 随机快排
通过头文件stdlib.h中的rand()方法生成[p, r]之间的随机数作为主元。
rand() % n 将生成 [0, n)之间的随机数。
为了重用partition方法,将选定的主元交换到位置 r。
4. 三数取中快排
每次划分前,从当前子数组里随机取出三个数,取这三个数的中间数作为主元的索引。