C++排序算法之位图法排序

位图法排序

(1)问题描述
《编程珠玑》里有这样一个问题:
     1.输入:一个至多包含1千万个非负整数的文件
     2.特征:①每个数都是小于10000000的非负整数;②没有重复的数字;③数据之间不存在关联关系。
     3.约束:①最多1MB的内存空间可用;②磁盘空间充足;③运行时间最多几分钟,最好是线性时间。
     4.输出:按升序排列的整数序列。

由于待排的数据比较多,不是是相当的多,如果我们单纯的使用常见的排序方法时间效率会很低,运行时间很长很长,而且要求最多使用1M的内存空间。所以我们不能同时把所有的整数读入内存(如果每个整数使用7个字节来存储,那么1MB内存空间只能存大约143000个数字)。当然我们可以多次读取输入文件,多次排序,但是更好的方案是使用位图排序,可以使用有限的1MB内存空间并只进行一趟排序。

(2)位图法
位图法:bitmap,就是用每一位来存放某种状态,适用于大规模不重复的数据,通常用来判断某个数据是否存在。
举例来说明一下:
对unsigned且没有重复的数字进行排序,假
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值