线性时间排序:计数排序、计数排序、桶排序

计数排序:

对于比较密集的整数,比如全校学生的成绩(0-100),直接放入101个桶(计数器),设置桶宽为1即可,稳定排序。

基数排序:

对于已知长度的整数,比如三位数,可以先排序个位数,然后十位数,然后百位数(不是从上往下排),稳定排序。

桶排序:

对于[0,1),这样的double型均匀分布,可以采用桶排序,桶内采用快排等其他排序思路,稳定排序。

题目:从100G个32位int数据里取出中位数

解答:32无符号int最多只能表示4G的数据,因此可以划出1M个桶,每个桶宽度为4K,读入数据,对每个桶进行计数排序(需要用long类型计数),找到中位桶,以及中位数在其的位置,然后对中位桶进行计数排序即可,需两趟读取,时间复杂度2N。