2012年11月1日
摘要: 问题描述:本节要求以最坏情况下O(n)的时间复杂度找到长度为n的数组中第 i 大的数。解决方案:《算法导论》上提供了一个算法,该算法实质上是利用了快排中划分的思想,但其通过一些比较复杂的预处理工作保证了快排划分的均匀,并且能够从理论上证明其最坏情况下的时间复杂度可以达到O(n)。算法步骤:1、如图所示,将n个数分成5个一组,共有⌊n/5⌋组。2、对⌈n/5⌉组(包括可能不到5个数的那组)的组内数据进行直接插入排序,排序完成之后,图中白色的数据即为组内数据的中位数。 并将这⌈n/5⌉个中位数挑出来,具体做法见后面的代码。3、递归调用本算法找到这⌈n/5⌉个中位数的中位数,假设它为图中的x。4、假 阅读全文
posted @ 2012-11-01 22:57 Snser 阅读(2499) 评论(0) 推荐(0) 编辑