c语言如何把一组连续的数随机排开
4个回答
展开全部
1 定义一个辅助数组,和原本数组中总数相同。
2 对辅助数组进行随机赋值。
3 对辅助数组进行排序,交换数据时,同时交换源数组中的相同位置。
4 当辅助数组有序后,源数组已经完成随机排序。
代码如下:
void radom_sort(int *a, int l)
{
int *b;
int i,j,t;
b = (int*)malloc(sizeof(int)*l);
srand(time(NULL));
for(i = 0; i < l; i ++)
b[i] = rand();
for(i = 0; i < l-1; i ++)
for(j = i + 1; j < l; j ++)
{
if(b[i]<b[j])
{
t = b[i];
b[i] = b[j];
b[j] = t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
展开全部
如果要对一组数据进行随即排开,一定要用到随即函数,又因为随机数取在C语言中采用的是固定序列,所以每次执行rand()所取的是同一个数。一般采取使用时间来产生随即的种子,从而产生不同的随即数。下面是一段产生随即数的函数,差不多改改就可以实现你所要的功能了
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int i;
time_t t;
srand( (unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for (i=0; i<10; i++)
printf("%d\n", rand()%100);
return 0;
}
这时运行程序,会发现每次产生的随机数都不一样。 那么为什么第一个程序一样而第二个程序不一样呢?
第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned) time(NULL));
time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
所以说,要想产生不同的随机数,在使用rand之前需要先调用srand
由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
k=rand()%(Y-X+1)+X;
这样,就可以产生你想要的任何范围内的随机数了。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int i;
time_t t;
srand( (unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for (i=0; i<10; i++)
printf("%d\n", rand()%100);
return 0;
}
这时运行程序,会发现每次产生的随机数都不一样。 那么为什么第一个程序一样而第二个程序不一样呢?
第二个程序用到了一个新的函数srand,这个函数是给随机数产生一个随机种子(seed),函数原型是srand( (unsigned) time(NULL));
time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
所以说,要想产生不同的随机数,在使用rand之前需要先调用srand
由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:
k=rand()%(Y-X+1)+X;
这样,就可以产生你想要的任何范围内的随机数了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-10-29
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j=0;
int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 假设有10个连续的自然数 */
int b[10] = {0}; /* 没有随机选择为0,已经被选择为1 */
srand((unsigned)time(NULL));
while(1)
{
i = rand()%10;
if(b[i]==0) /* 保证每个数只能随机选择1次 */
{
printf("%d ",a[i]);
b[i]=1;
j++;
if(j==10) break; /* 10个数都被随机选择 */
}
}
return 0;
}
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j=0;
int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 假设有10个连续的自然数 */
int b[10] = {0}; /* 没有随机选择为0,已经被选择为1 */
srand((unsigned)time(NULL));
while(1)
{
i = rand()%10;
if(b[i]==0) /* 保证每个数只能随机选择1次 */
{
printf("%d ",a[i]);
b[i]=1;
j++;
if(j==10) break; /* 10个数都被随机选择 */
}
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
随即函数呗:
int i;
for(i=1;i<=n;i++){
int j=rand()%n;
swap(a[i],a[j]);//a为你要随机的数组
}
即可。。
int i;
for(i=1;i<=n;i++){
int j=rand()%n;
swap(a[i],a[j]);//a为你要随机的数组
}
即可。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询