编程珠玑 第一章
2014-09-04 21:59
155 查看
题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复。求如何将这n个正整数升序排列。
约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。
习题2 习题3 实现位向量用于排序。
习题4:返回0至n-1之间的k个不同的随即顺序的随机整数。
约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。
习题2 习题3 实现位向量用于排序。
#include<stdio.h> #define N 10000000 #define Shift 5 #define BitPerWord (sizeof(int)*8) #define Mask ((1<<Shift)-1) int a[1+N/BitPerWord]; 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)); } int main(){ freopen("data.in","r",stdin); freopen("data.out","w",stdout); for(int i=0;i<N;i++) clr(i); int a; while(scanf("%d",&a)!=EOF) set(a); for(int i=0;i<N;i++){ if(test(i)) printf("%d ",i); } printf("\n"); return 0; }
习题4:返回0至n-1之间的k个不同的随即顺序的随机整数。
for i = [0,n) x[i]=i for i = [0,k) swap(i,rand(i,n-1)) print(x[i])
相关文章推荐
- 【编程珠玑】第一章 开篇
- 编程珠玑之第一章:开篇(习题)泛览
- 第一章 开篇 - 编程珠玑 - 读书笔记
- 【编程珠玑】第一章 开篇
- 编程珠玑之第一章习题5:两趟算法完成100w数据排序
- 【编程珠玑】陪着奶猫看看书--《编程珠玑》第一章
- 【编程珠玑】第一章电话号码排序
- 编程珠玑 第一章 开篇
- 【编程珠玑】读书笔记 第一章 开篇
- [编程珠玑]-第一章:位图/位向量排序
- 编程珠玑---第一章 阅读笔记
- 编程珠玑 第一章解析
- 编程珠玑第一章
- 【编程珠玑】第一章 开篇
- 编程珠玑-第一章
- 编程珠玑 第一章 问题以及分析解答
- 编程珠玑第一章之产生数据1000000-9999999(二)C/C++高效实现
- 编程珠玑之第一章习题7:处理程序存在的缺陷的问答与测试
- 【编程珠玑】第一章位图排序
- 关于编程珠玑第一章的体会