博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序文件中的N个不重复的正整数
阅读量:6816 次
发布时间:2019-06-26

本文共 1147 字,大约阅读时间需要 3 分钟。

From 《编程珠玑》:一个文件中至多包含n个不重复的正整数,每个正整数都小于n,这里n=10^7。要求:以增量的形式输出经排序后的整数(限用1M内存)。

思路1:1M内存大约可以存储250000个整数。因此我们可以对输入文件遍历40次,第一次遍历过程中将值大于0、小于249999的所有整数读入内存,然后进行快速排序,再写入目标文件;第二次遍历过程中将值大于250000、小于499999的所有整数读入内存,排完序后写入目标文件,后面依此类推;第40次遍历过程中将大于9750000、小于9999999的所有整数读入内存,排完序后写入目标文件。此时目标文件中的整数已按增量排完序,顺序输出即可。

思路2:系统排序

(Command命令行)>sort originalFileName.ext >> targetFileName.ext

思路3:位图数据结构。

#define
 bitSperWord 32
#define
 shift 5
#define
 mask 0x1f
#define
 N 10000000
int
 a[
1
+
N
/
bitSperWord];
void
 
set
(
int
 i)
{a[i>>shift] |= (1<<(i & mask));}
void
 clr(
int
 i)
{a[i>>shift] &=~(1<<(i & mask));}
int
 test(
int
 i)
{
return a[i>>shift] & (1<<(i & mask));}

 

 

如果不限内存,还可以使用下面两种排序方法:
思路1:C++/STL

int
 mail(
void
)
{
    
set<int> s;
    
int i;
    
set<int>::iterator j;
    
while(cin>>i) 
        s.insert(i);
    
for(j=s.begin();j!=s.end();++j)
        cout
<<*j<<" ";  
    
return 0;
}

 

思路2:C/qsort

int
 intcomp(
int
 
*
x,
int
 
*
y)
{
    
return *x-*y;
}
int
 a[
10000000
];
int
 main(
void
)
{
   
int i,n=0;
   
while(scanf("%d",&a[n])!=EOF)
       n
++;
   qsort(a,n,
sizeof(int),intcomp);
   
for(i=0;i<n;i++)
       printf(
"%d" ",a[i]);
}
 

本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2006/12/19/601300.html,如需转载请自行联系原作者

你可能感兴趣的文章
centOS6.5下rpm安装mysql5.6.23
查看>>
MicroProfile + Kubernetes,轻松搞定Java 微服务
查看>>
加密芯片对比
查看>>
IT 运维分析及海量日志搜索的实践之路(上)
查看>>
PHP启动时配置文件显示: Loaded Configuration File => (none)
查看>>
JDBC的CRUD操作之删除操作
查看>>
python装饰器 运行时间
查看>>
Python编写表白神器!向你的女神告白吧!!
查看>>
[笔记]在eclipse中调试maven项目的3种方法
查看>>
关于JEPLUS软件介绍——JEPLUS软件快速开发平台
查看>>
连载32:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
查看>>
什么是响应式网站 为什么会受到客户的喜欢
查看>>
keepalived实现nginx的高可用 + nginx负载均衡
查看>>
阿里云Redis多线程性能提升思路解析
查看>>
JAVA通信
查看>>
动态增加UIView到当前视图中
查看>>
怎么能看透信封
查看>>
css正方形照片墙
查看>>
找工作的程序员必懂的Linux
查看>>
网络基础、进程、计划任务
查看>>