位排序算法
位排序算法,一种占用内存小、运行时间快应用于特殊情况的算法
0x01.问题背景
- 问题描述:需要对磁盘中的文件进行排序,对时间效率要求高,文件中包含千万条记录,每条记录都是7位整数(百万)号码
整数记录数据不重复,每条记录都是单一数据。 - 输入:一个包含N个整数的文件,每个数都小于N=10^7,整数无重复
- 输出:将输入的整数进行升序排序,输出有序的列表
- 约束条件:大约有1MB的内存空间可用,充足的磁盘空间,时间控制在10s-8min之间
0x02.解决方法
1.归并排序
磁盘文件最常用的排序算法就是归并排序,但是对于千万数量级别的数据,运行时间是以天为单位
// 归并排序算法实现
int mergeSortCore(int[] &array,int lo,int mid,int hi)
{
int len=array.size(); // 数组长度
// 将数组进行备份
int compare[array.size()];
for(int k=0;k<len;k++)
{
compare[k]=array[k];
}
// 双指针进行比较赋值
int i=lo;
int j=mid+1;
for(int k=lo;k<=hi;k++)
{
if(i>mid) array[k]=compare[j++];
else if(j>hi) array[k]=compare[i++];
else if(compare[i]>compare[j]) array[k]=compare