包含排序
sort--排全部
冒泡等--排k个 n*k
快排--nlogn的复杂度,但是是在平均的情况下,最糟糕的情况依然是n方
不含排序
随机选择--用快排的思想,但只递归一边 是On(哼哼,某厂面试官还...)
堆--以最小k个为例,先把前k个 元素建立一个大顶堆(On),然后从k+1开始遍历,如果小于堆顶则替换,并下沉,最糟糕的复杂度是nlogk
大数据的情况 100亿找1000
堆ok
mapreduce
1.将100亿个数据分为1000个大分区,每个区1000万个数据
2.每个大分区再细分成100个小分区。总共就有1000*100=10万个分区
3.计算每个小分区上最大的1000个数
4.合并每个大分区的100个小分区,得到1000个大分区,找出每个大分区的前1000个数。
5.合并大分区,得到总的区,找出前1000
hash(如果重复度很高)
1. 去重 (附常识 | hashset去重_tuuzkiii_Tuu的博客-CSDN博客
2. 用堆