zoukankan      html  css  js  c++  java
  • 编程珠玑 第一章

    题目:一个最多包含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("
    ");
    
        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])
  • 相关阅读:
    Spring Cloud云架构
    Spring Cloud云架构
    Spring Cloud云架构
    Spring Cloud云架构
    Spring Cloud Consul
    Spring Cloud Eureka
    构建Spring Cloud微服务分布式云架构
    数据库三范式
    redis3.0.0 集群安装详细步骤
    sql优化的几种方法
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3956954.html
Copyright © 2011-2022 走看看