生成随机数组

不多说,直接上代码测试,之前在网上看到一个生成随机数组,写的实在不怎么样,下面是我的方式,有谁有更好的方式,可以交流一下

 

C代码:很快很快的

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


void main() {
        long last = 1000000;
        long *arr=(long *)malloc(last*sizeof(long));
        long *brr=(long *)malloc(last*sizeof(long));
        long i,R;

        srand((unsigned)time(NULL));
        for(i=0;i<last;i++){
                arr[i]=i;
        }

        while(last>0){
                R=rand()*rand()%1000000;
                if(arr[R]==-10) continue;
                brr[1000000-last]=arr[R];
                arr[R]=-10;
                last--;
        }

        printf("%d\n",brr[0]);
        printf("%d\n",last);


}

 

PHP代码:自带函数,其实也是C的实现shuffle 两两随机交换的原理(快速排序也是两个交换,这样空间复杂度肯定低一点)

<?php

$arr = range(0, 1000000);
$length = 1000001;



shuffle($arr);
echo $arr[2];
echo "\n";

echo xdebug_time_index();

//END

 

PHP代码:自己实现的,不是一般的慢要17s左右,已经是十分快的的一种方式了,其他方式一般会显示  内存耗尽了

<?php

$arr = range(0, 1000000);
$length = 1000001;
$out = array();

while($length) {
        $R = mt_rand(0,$length);
        $out[] = $arr[$R];
        $arr[$R]=$arr[$length-1];
        $length--;
}
shuffle($arr);
echo $arr[2];
echo "\n";

echo xdebug_time_index();

//END

 

posted @ 2015-05-25 22:40  踏雪无痕SS  阅读(647)  评论(0编辑  收藏  举报