C#编程之经典算法——排序(五)

来源:互联网 发布:南京seo哪家好 编辑:程序博客网 时间:2024/06/11 03:04

平衡快排(Balanced Quicksort)与随机化快排(Randomization Quicksort)

      平衡快排与普通快速的原理相同,只是尽可能地选择一个能够代表中值的元素作为关键数据,然后遵循普通快排的原则进行比较、替换和递归。通常来说,选择这个数据的方法是取开头、结尾、中间3个数据,通过比较选出其中的中值。

 

平衡快排示例

 

 

      与平衡快排相似的排序就是随机化快排。

      快速排序的最坏情况基于每次划分对主元的选择。基本的快速排序选取第一个元素作为主元。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为主元。这种情况下虽然最坏情况仍然是O(n^2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。实际上,随机化快速排序得到理论最坏情况的可能性仅为1/(2^n)。所以随机化快速排序可以对于绝大多数输入数据达到O(nlogn)的期望时间复杂度。一位前辈做出了一个精辟的总结:“随机化快速排序可以满足一个人一辈子的人品需求。”

 

      随机化快排除了参数索引的选择方法不同,其它部分与平衡快排完全相同,在此就不再另写示例方法。

原创粉丝点击