数组洗牌

将一个给定的数组洗牌,要求时间复杂度O(n),空间复杂度1:

#include<stdio.h>

int randomNum(int start,int end);
int shuffle(int *a,int len);
int main(void){
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int i;
    printf("洗牌前的数组:");
    for(i=0;i<10;i++){
        printf("%d  ",a[i]);
    }
    srand(time(NULL));//刷新随机数
    shuffle(&a,10);
    printf("\n洗牌后的数组:");
    for(i=0;i<10;i++){
        printf("%d  ",a[i]);
    }
    return 1;
}

int randomNum(int start,int end){//产生指定范围随机数[start,end)
    int r=rand()%end;
    while(r<start)
        r=rand()%end;
    return r;
}

int shuffle(int *a,int len){   //洗牌函数
    int i,addr,tmp;
    for(i=0;i<len;i++){//遍历一次实现洗牌
        addr=randomNum(i,len);
        tmp=a[i];
        a[i]=a[addr];
        a[addr]=tmp;
    }
}

 

posted @ 2013-10-16 19:08  ydp  阅读(406)  评论(0编辑  收藏  举报