位图法排序
(1)问题描述
《编程珠玑》里有这样一个问题:
1.输入:一个至多包含1千万个非负整数的文件
2.特征:①每个数都是小于10000000的非负整数;②没有重复的数字;③数据之间不存在关联关系。
3.约束:①最多1MB的内存空间可用;②磁盘空间充足;③运行时间最多几分钟,最好是线性时间。
4.输出:按升序排列的整数序列。
由于待排的数据比较多,不是是相当的多,如果我们单纯的使用常见的排序方法时间效率会很低,运行时间很长很长,而且要求最多使用1M的内存空间。所以我们不能同时把所有的整数读入内存(如果每个整数使用7个字节来存储,那么1MB内存空间只能存大约143000个数字)。当然我们可以多次读取输入文件,多次排序,但是更好的方案是使用位图排序,可以使用有限的1MB内存空间并只进行一趟排序。
(2)位图法
位图法:bitmap,就是用每一位来存放某种状态,适用于大规模不重复的数据,通常用来判断某个数据是否存在。
举例来说明一下:
对unsigned且没有重复的数字进行排序,假