c语言打乱数组顺序函数 实现数组乱序

用C语言怎样打乱一组数据?

#pragma

成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,十载企业及个人网站建设经验 ,为成都千余家客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,高端网站设计,同时也为不同行业的客户提供网站设计、成都网站设计的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联建站

once

#include

iostream

#include

Windows.h

using

namespace

std;

#pragma

comment(

lib,

"winmm.lib"

)

int

main()

{

//定义一个数组(自己随便定义,这里以10个大小的数组为例)

const

int

iSum

=

10;

int

iAry[iSum]

=

{3,7,5,87,23,1,65,8,51,64};

//定义一个数组用来保存打乱顺序后的数

int

iDistrubAry[iSum]

=

{0};

//播随机种子(以便每次随机的值有相等的机会)

srand(timeGetTime());

//每次随机的不相同的数存到这个数组里(以便下次随机时判断随机的数是否已经随机过了)

int

iRandomData[iSum]

=

{0};

//将iRandomData元数都赋初值为-1,表示没有产生一个随机数

for

(

int

i=0;

iiSum;

i++

)

{

iRandomData[i]

=

-1;

}

//共产生不同的随机的个数

int

iRandomSum

=

0;

//打乱这个数组

for

(

int

i=0;

iiSum;

i++

)

{

//随机一个数

int

iRandom

=

rand()%iSum;

//判断iRandomSum是否为0,是0的话表示没有随机过任何数,就不用查询是否随机到这个数了

if

(

iRandomSum

!=

)

{

//用来判断是否连续随机(当随机的数与之前随机的有重复时就连续随机)

for

(

int

i=0;

iiRandomSum;

i++

)

{

if

(

iRandom

==

iRandomData[i]

)

{

iRandom

=

rand()%iSum;

//i要赋值为-1,表示重新查询是否与以前随机的数重复

i

=

-1;

}

}

}

//将产生的随机数添加到RandomData里面

iRandomData[iRandomSum]

=

iRandom;

//将随机的数作为原来数组的索引,取出原来数组此索引的值保存在打乱后的数组中

iDistrubAry[iRandomSum]

=

iAry[iRandom];

//将iRandom加1,表明已经打乱好了一个数

iRandomSum++;

}

//显示未打乱的数组

cout"未打乱的数组:";

for

(

int

i=0;

iiSum;

i++

)

{

coutiAry[i]"

";

}

coutendl;

//显示打乱后的数组

cout"打乱后的数组:";

for

(

int

i=0;

iiSum;

i++

)

{

coutiDistrubAry[i]"

";

}

coutendl;

system(

"pause"

);

}

怎样用C语言打乱一个已排序的数组

//使用随机数交换的形式打乱数组。随机生成一个随机数组下表,然后进行交换,达到打乱的目的。

#include stdio.h

#include iostream

#includestdlib.h

#includetime.h

using namespace std;

int main()

{

int a[10];

for(int i=0;i10;i++)

{

a[i]=i+1;

}

printf("顺序输出:"); 

for(int i=0;i10;i++)

{

printf("%d ",a[i]);

}

srand((int)time(NULL));

for(int i=0;i10;i++)

{

swap(a[i],a[rand()%10]);

}

printf("\n打乱顺序后:"); 

for(int i=0;i10;i++)

{

printf("%d ",a[i]);

}

//system("pause");

}

c语言如何随机打乱数组

int a[] = {3,5,7,1,4};

// 本程序考虑时间复杂度最小情况的乱序算法,O(t)=len-1

// 算法模仿彩票摇号,从全集中先取一个为第一位,再在剩余集合中取出一个为第2位,...

// 直至最后一个,只是考虑空间利用,已排序集合利用全集的空间。

int len=sizeof(a); // 全集元素数量

srand(unsigned(time(NULL))); // 摇号机准备

for(int i=len;i1;i--) // 从全集开始摇号,直至只剩一个,已排在最后

{

int cur=len-i+(rand()%i); // 在剩余集合中摇号

int tmp=a[len-i]; // 当前序号位置挪空

a[len-i]=a[cur]; // 摇出的彩球放入当前序号

a[lcur]=tmp; // 放好剩余的彩球

}

C语言有什么办法把一定范围里的数子打乱顺序

1,你先建或者产生从小到大排的的数放一个数组中.原牌x个.

2,产生0到x-1的随机值x个,不要重复.用来做原数组的下标取对应的值,再放入新数组中,

3,输出新组.洗的新牌.

C语言中如何将数组乱序

可以这样:

srand(time(0));

for(i=0;iN;i++)

{

m=rand()%9;

n=rand()%9;

t=a[m];

a[m]=a[n];

a[n]=t;

}

就是每次生成两个0到8之间的随机数,然后以它们作为下标,交换两个位置的数字,只要N足够大,应该能够达到要求

一个C语言的小问题,把一个数组随机打乱的代码,代码如下

因为i=9的时候,执行_rand(i,9);时,在函数_rand里,a为9,b为9,由于i=rand()%b; 所以i最大为8,所以在 if(ia) goto Y; 这个地方会永远跳回到Y。就这么死循环了。


网页名称:c语言打乱数组顺序函数 实现数组乱序
网站URL:http://myzitong.com/article/hjhjps.html