码迷,mamicode.com
首页 > 其他好文 > 详细

编程珠玑 第一章

时间:2014-09-04 22:08:40      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   strong   for   文件   div   sp   

题目:一个最多包含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]=i

for i = [0,k)
    swap(i,rand(i,n-1))
    print(x[i])

 

编程珠玑 第一章

标签:style   blog   color   io   strong   for   文件   div   sp   

原文地址:http://www.cnblogs.com/jdflyfly/p/3956954.html

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