c语言如何把一组连续的数随机排开

 我来答
风若远去何人留
2015-12-30 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450127
专业C/C++软件开发

向TA提问 私信TA
展开全部

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;
            }
        }
}
冉易云ST
2011-10-28 · TA获得超过535个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:523万
展开全部
如果要对一组数据进行随即排开,一定要用到随即函数,又因为随机数取在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;
    这样,就可以产生你想要的任何范围内的随机数了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylwml1010
2011-10-28
知道答主
回答量:18
采纳率:0%
帮助的人:13.8万
展开全部
随即函数呗:
int i;
for(i=1;i<=n;i++){
int j=rand()%n;
swap(a[i],a[j]);//a为你要随机的数组
}
即可。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式