位排序算法

位排序算法适用于内存有限但磁盘空间充足的情况,如对包含千万7位整数的文件进行排序。通过将数据分为40个子文件,利用快速排序和位图表示集合,可以在1MB内存限制内实现排序。位排序通过构建位向量,将输入数字对应的位设为1,然后遍历输出,内存需求约为1.19MB。
摘要由CSDN通过智能技术生成

位排序算法

位排序算法,一种占用内存小、运行时间快应用于特殊情况的算法

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值