生成随机数组
不多说,直接上代码测试,之前在网上看到一个生成随机数组,写的实在不怎么样,下面是我的方式,有谁有更好的方式,可以交流一下
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
- 作者:踏雪无痕
- 出处:http://www.cnblogs.com/chenpingzhao/
- 本文版权归作者和博客园共有,如需转载,请联系 pingzhao1990#163.com