永发信息网

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

答案:4  悬赏:60  手机版
解决时间 2021-04-02 06:16
  • 提问者网友:無理詩人
  • 2021-04-01 05:18
c语言如何把一组连续的数随机排开
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-04-01 05:52
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]            {
                t = b[i];
                b[i] = b[j];
                b[j] = t;
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
}
全部回答
  • 1楼网友:拾荒鲤
  • 2021-04-01 07:57
随即函数呗:
int i;
for(i=1;i<=n;i++){
int j=rand()%n;
swap(a[i],a[j]);//a为你要随机的数组
}
即可。。
  • 2楼网友:千夜
  • 2021-04-01 07:46
如果要对一组数据进行随即排开,一定要用到随即函数,又因为随机数取在C语言中采用的是固定序列,所以每次执行rand()所取的是同一个数。一般采取使用时间来产生随即的种子,从而产生不同的随即数。下面是一段产生随即数的函数,差不多改改就可以实现你所要的功能了
#include
#include
#include
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;
    这样,就可以产生你想要的任何范围内的随机数了。
  • 3楼网友:归鹤鸣
  • 2021-04-01 06:43
#include
#include
#include
int main()
{
int i,j=0;
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int b[10] = {0};
srand((unsigned)time(NULL));
while(1)
{
i = rand()%10;
if(b[i]==0)
{
printf("%d ",a[i]);
b[i]=1;
j++;
if(j==10) break;
}
}
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯