排序文件中的N个不重复的正整数
2006-12-19 07:19
387 查看
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];
int mail(void)
int intcomp(int *x,int *y)
int a[10000000];
int main(void)
...{
int i,n=0;
while(scanf("%d",&a
)!=EOF)
n++;
qsort(a,n,sizeof(int),intcomp);
for(i=0;i<n;i++)
printf("%d" ",a[i]);
}
思路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];
int mail(void)
int intcomp(int *x,int *y)
int a[10000000];
int main(void)
...{
int i,n=0;
while(scanf("%d",&a
)!=EOF)
n++;
qsort(a,n,sizeof(int),intcomp);
for(i=0;i<n;i++)
printf("%d" ",a[i]);
}
相关文章推荐
- 排序文件中的N个不重复的正整数
- 一个数组中有65535个数不重复的大于0的整数(即:0~~65535内所有不重复的整数,数序是杂乱无章的), 用最快的方式排序
- 文件中有一组整数,要求排序后输出到另一个文件中
- 2011-12-04 15:36 JAVA实现位向量给无重复元素的整数数组排序
- 算法 - 有一个连续整数序列,里面随机存放的是0到99这100个不重复的整数,要求对该序列排序。
- Bitmap在海量无重复整数排序时的应用
- 文件中有一组整数,要求排序后输出到另一个文件中
- 文件中有一整数数组,要求排序后输出到另一文件(C++)
- 把文件中的一组整数排序后输出到另一个文件中(c/c++)
- 5亿整数的大文件,怎么排序?
- 整型数组处理算法(二)文件中有一组整数,要求排序后输出到另一个文件中
- 文件中有一组整数,要求排序后输出到另一个文件中
- 将两个文件记录合并,每条记录占用一行,要求删除重复行,合并行并对其排序。
- 文件中有一组整数,要求排序后输出到另一个文件中
- C++面试题:把文件中的一组整数排序后输出到另一个文件中。
- 微软笔试题 给一个包含10^7个整数的大文件排序
- 一个数组中有65535个数不重复的大于0的整数(即:0~~65535内所有不重复的整数,数序是杂乱无章的), 用最快的方式排序
- linux文本排序、交集、差集,查找并删除重复文件脚本、comm命令
- 源文件中有一组整数,排序后输出到另一个文件
- 混合使用ForkJoin+Actor+Future实现一千万个不重复整数的排序(Scala示例)