求从n(n>=1000)个数中计算最大的10数的算法,要最快的算法(继续问http://community.csdn.net/Expert/topic/4291/4291588.xml?temp=.90382
清华大学考研的答案是:
是用快速排序法,不断的分后半部分(比某个数大的部分),直到这个部分的数量小等于10。不足10个元素在前一部分找相应个数。
(清华大学的数是1500个数好像)
还有一个什么大学也考过(是100000个数),答案是堆排序。
我觉的用堆排序也不慢,只是建堆可能比快速排序慢了。后面选出10个都很快每个都只要longN就能找出。
快速排序偶然性较大,原理上其实和找第k大元素的方法一样。
建堆耗费的时间多还是找第k大元素耗费时间多还真是不一定,我也不知到那个是正确。
那位大哥能分析这本题堆排序和快速排序的平均时间复杂度。
顺便说说如何算时间复杂度,我一遇到这个问题头就大,什么母函数法,解递归方程法我都用不上啊。