排序这块,有用又tricky的tips

4.高效思路
特别的,利用快排思想可以解决的问题:
(1)找出数组中超过一半的数字。
普通思路:排序,之后统计各个元素的次数,进而找出。由于要排序,所以效率为O(nlogn)。
利用快排思想,问题转化为求中位数,效率可以达到O(n)。
(2)找出数组中最小的k个数。
普通思路:排序,之后找出最前的k个数字,由于要排序,所以效率为O(nlogn)。
利用快排思想,找出第k个位置左边的数字即可,即一次key值为k位置的排序即可,效率可以达到O(n)。
然而,快排思路解决问题是有限制的,因为他会改变输入的数组。

猜你喜欢

转载自have-life.iteye.com/blog/1680343