将500万个电话号码用不到1M内存空间输出到文件/C/C++

寒拓冰 2011-03-23 01:22:36
有一个文本文件中存储了约500万个电话号码,每个电话号码为7位数字,电话号码之间无重复,现希望将这些电话号码排序并输出到一个新文件中,最好使内存占用不到1M,求解决措施
...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-23
  • 打赏
  • 举报
回复
压缩BCD码?
ww884203 2011-03-23
  • 打赏
  • 举报
回复
ls的思路是对的,补充一下。
首先建立一个bit[i]的大数组,每一个是一位也就是1或者0,8位一个字节,由于是7位数所以为10000000/8 = 125万位,而1MB=1024*1024*8=838万多位,足够了。
之后就是读入一个号码,作为一个整数index,然后bit[index] = 1,既读入了号码同时还排了序
最后全部读完了就遍历整个bit,如果是1则输出,不是1就不输出。
ljt3969636 2011-03-23
  • 打赏
  • 举报
回复
用位操作
伪码:
for[i=0:500万-1]
如果bit[i]=1 i为电话号;如(bit[110]=1 00000....000110号);

之后由高到低或者由低到高(按你排序的需要)遍历bit哪为1输出这位的位数即可
寒拓冰 2011-03-23
  • 打赏
  • 举报
回复
如果用树的形式表示的话,应该可以不?
这道题的算法还没想透

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧