编程珠玑 第一章
題目:一個最多包含n個正整數的文件,每個數都小于n,其中n=10^7,且所有正整數都不重復。求如何將這n個正整數升序排列。
約束:最多有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]=ifor i = [0,k)swap(i,rand(i,n-1))print(x[i])?
轉載于:https://www.cnblogs.com/jdflyfly/p/3956954.html
總結
- 上一篇: C++ 容器 LIST VECTOR
- 下一篇: 深入理解 C# 协变和逆变【转】