zoukankan      html  css  js  c++  java
  • 编程珠玑2中的习题

    /*
     * Filename: 
     * Auther: mlj
     *第一章 第四题  产生0-n-1 之间k个随机顺序的随机整数
     * Create date: 2013/ 3/12
     */
     #include <stdlib.h> 
    #include <stdio.h> 
    #include<stdio.h>
    #include <time.h>  
    #define N 10000000
    #define K 1000000
    
    void swap(int *pm,int *pn)      /*必须用指针进行交换*/
    {
       int temp;
       temp=*pm;
       *pm=*pn;
       *pn=temp;
    }
    
    int randint(l,u)
    {
        return rand()%(u-l+1)+l;
    }
    int a[N];
    int main(void)
    {
        int   i;
        FILE *fp =NULL;
        fp = fopen("test.dat","wb"); 
        srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/
        for(i=0;   i<N;   i++) {a[i]=i;}
        for(i=0;   i<K;   i++)
        {
         /* pa=&a[i]; pb=&a[rand()%i+1];*/
          swap(&a[i], &a[rand()%(N-i)+i]);     
          fwrite(&a[i],sizeof(int),1,fp);
          //printf("%d ",a[i] );
        }
        fclose(fp);     
    }
    int a[N]; 不能定义成局部变量,局部变量在栈区,大小有限。

    /*
     * Filename: 
     * Auther: mlj
     *第一章 第3题  产生的k个 随机整数 排序
     * Create date: 2013/ 3/12
     */
     #include <stdlib.h> 
    #include <stdio.h> 
    #include<stdio.h>
    #include <time.h>  
    #define N 10000000
    #define K 1000000
    
    #define BITSPERWORD 32
    #define SHIFT 5
    #define MASK 0x1f
    int a[1+N/BITSPERWORD];
    
    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 intcomp(const void *a,const void *b)
    {
        return *((int*)a) - *((int*)b);
    }
    
    int main(void)
    {
        int   i;
        FILE *fp =NULL;
        float starttime = 0.0f;
        int *stream =(int*) malloc( sizeof(int)*K);
        int *p=NULL;
        fp = fopen("test.dat","rb"); 
        
        fread(stream,sizeof(int),K,fp) ;
        //printf("读文件耗时 %0.2f",clock()*0.001f-starttime);
        starttime = clock()*0.001f;
        for(i=0;   i<N;   i++) 
            clr(i);  
        for(i=0;   i<K;   i++)      
             set(*(stream+i)); 
        p = stream;
        for(i=0;   i<N;   i++)
        {
         /* pa=&a[i]; pb=&a[rand()%i+1];*/
          if(test(i))     
             *(p++) = i;
          //printf("%d ",a[i] );
        }
        printf("总耗时 %0.2f",clock()*0.001f-starttime);
    
        fseek(fp,0,SEEK_SET);
        fread(stream,sizeof(int),K,fp) ;
        starttime = clock()*0.001f;
        qsort(stream,K,sizeof(int),intcomp);
        printf("总耗时 %0.2f",clock()*0.001f-starttime);
        fclose(fp);     
        free(stream);
        return 0;
    }

    总耗时 0.10总耗时 0.17

    C/位图0.1s  ,qsort 也才0.17s .

     
  • 相关阅读:
    图解插入排序
    图解冒泡排序
    break 和continue的两种用法
    循环的使用选择
    jstl标签库使用报错index_jsp.java找不到问题
    [Android 除錯] Conflict with dependency
    jQueryMobile 網頁使用 ASP.NET Web API 服務
    Chart.js 與 ASP.NET MVC 整合應用
    HTML5 新增的 input 事件
    ASP.NET MVC 5 實作 GridView 分頁
  • 原文地址:https://www.cnblogs.com/mlj318/p/2956101.html
Copyright © 2011-2022 走看看