码迷,mamicode.com
首页 > 编程语言 > 详细

纯整型排序的思考

时间:2015-04-09 23:13:36      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

 

2015/4/9周四  

  今天看编程珠玑,发现了个有趣的问题,大概是这样的:磁盘上有个文件,其中有多达1千万个不重复的整数(每个整数是7位数的,即小于10 000 000),如何排序后输出到硬盘?要求:时间大概10秒之内,内存大概1M。

  分析:int 占4个字节,即32位,1 M = 1024 K = 1048576 byte,而1M / 4 byte = 262 144 个号码。明显不够用。那么考虑位图法,用1千万个位来表示,需要1250000个字节,约1200K,约1.17M。这样就大概满足了要求了,开始编码:

技术分享
1 //初始化
2 memset(bit,0,sizeof(bit))
3 //磁盘读进内存
4 for(int i=0;i<n;i++)
5     bit[i]=0
6 //输出
7 for( i=0;i<n;i++)
8     write_to_file;
sort_for_int

  具体实现位操作(自己写出来才能看懂代码):

技术分享
 1 #define BITSPERWORD 32 
 2 #define SHIFT 5 //位移量
 3 #define MASK 0x1F //右5位,代表32位
 4 #define N 10000000
 5 int a[1 + N/BITSPERWORD];
 6 
 7 void set(int i)
 8 {
 9     a[ i>>SHIFT ] |= ( 1<<(i & MASK) );
10 }
11 void clr(int i)
12 {
13     a[ i>>SHIFT ] &= ~( 1<<(i & MASK) );
14 }
15 int test(int i)
16 {
17     return a[ i>>SHIFT ] & ( 1<<(i & MASK) );
18 }
for_control

  

 

纯整型排序的思考

标签:

原文地址:http://www.cnblogs.com/xcw0754/p/4412319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!