题目:给定一个无序序列和一个数k,求这个无序序列中第K大的数
分析:
方案一:最朴素的方法利用快速排序然后找到第k个数,时间复杂度O(nlogn)
方案二:根据快速排序中的partition方法,每次可以把一个序列分成两个部分,左边全部小于等于基准,右边的全部大于等于基准。如果partition方法中基准的位置刚好是第k个则可以直接得多这个数,如果大于k说明在左边,如果小于k说明在右边。
利用这个方法每次可以将序列不断的划分直至找到这第k个数, 因为partition函数的时间复杂度最大为O(n),而我们每次都可以把序列分成一半,因此总的时间复杂度还是O(n)。
时间复杂度的证明:
1. 假设总的元素个数有n个,则