先给出问题的描述以及解决思路:
/**
* Created by louyuting on 2017/2/24.
*
* Question: 对某公司员工的所有电话号码进行排序, 数据量级别明显是万级别的.
*
* category: 大数据量进行排序
*
* solution: (1)首先根据电话号码的号段进行分类, 分为130-139, 150-159, 180-189 也就是30个分段,这里就是桶排序的思想
* (2)然后就是对每个分段进行排序(也就是对每个桶进行排序)
* 这里利用类似于hash表的思路,因为每个电话号码要么存在要么不存在,所以用bit来标识每个位是否存在.
* 如果不用bit,用整形的话,计算一下,30*8^10 = 30亿条记录, 如果存整形的话,一个数字是4字节,总共是120亿个字节. 计算一下就是11.4GB,这就占太大的内存了;
* 这个时候我们换个思路,利用bit来存储,因为电话号码本来就是连续的,而且我们只标识某一个电话号码是否存在,所以没毛病,
* 这时候原本4字节保存一个标志位,就变成了bit位,缩小了 4*16=64倍, 所以占内存就变成了178M, 这时候就能接受了.
* 而且每个分段的内存大小是约5.9M
*
* (3)由于每个分段之间本身就是有序的,所以现在只用关心各自分段的部分. 这就类似于利用哈希表来标识每个电话号存不存在.
* 1)这时候的核心就是: 输入一个电话号码,装换为整形,根据前面三位分别进入不同的桶;
* 2)在不同桶内,根据电话后8位,计算出在一个桶内的坐标位,然后响应的bit 置为1;
* 3)判断完所有电话号码之后,就可以通过一轮遍历获取所有电话号码和排序结果.
*
* analysis: 时