数据结构中随机数的算法

这篇博客介绍了三种在C语言中生成不重复随机数的方法,包括直接生成、利用数组标记已生成数和使用交换操作。每种算法都通过时间戳计算了运行时间,适合理解数据结构中的随机数生成策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      假设要生成前n个自然数的一个随机置换,如{4,3,1,5,2}和{3,1,4,2,5}就是一个合法置换;但{5,4,1,2,1}就不是,因为1出现2次而3没有。假设我们有一个随机数生成器RandInt(i,j),它以相同概率生成i到j之间的整数,下面是三个算法。
(1) 如下填入从A[0]到A[N-1]的数组A:为了填入A[i],生成不同于A[0],A[1],...,A[i-1]之间的随机数时,才将其填入A[i]
(2) 同算法1,但保留一个称为Used数组的附加数组,当一个随机数Ram最初被放入数组A的时候,Used[Ram]=1.这就是说,当用一个随机数填入A[i]时,用Used数组来测试该随机数是否已经被使用。
(3)       请分析上面三种算法各自的时间复杂度,并编 首先填写数组使得A[i]=i+1;然后
          For(i=1;i<N;i++)

                   Swap(&A[i],&A[RandInt(0,i)])

代码:#include<stdio.h>
#include<stdlib.h>
#include<time.h>//时间种子 
#define LEN 100000


/*
*author:hacker_crazy
*time:2014.9.22
*/




//产生随机数的函数 :因为可能数字很大,所以用long型 
long RandInt(long x,long y){
if(x==0){
return rand()%y;
}else{
return rand()%(y-x+1)+x;

}
//判断是不是出现过
bool findNumber(long ran,long * a,int i){
int j;
for (j=0;j<i;j++){
if(a[j]==ran){//ran是出现过的自然数 
return true;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值