用C语言如何将一个一维数组中的元素随机排序

如题所述

#include

#include

#include

intmain()

{

inti,j,n,k,t,a[100];

srand((unsigned)time(NULL));

<p

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

运行的结果:

#include

#include

intmain()

{

int&nbs

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

扩展资料

C语言排序法

在一层循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位。

这样只能排好一个元素,于是需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02

利用rand()函数产生随机数字,rand()%n产生小于n的随机数, 然后交换。

下面是我写的程序和运行的结果:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int a[1000], n, i, j, p, q, t;

    while(1)

    {

        printf("\n\n请输入一维数组的维数,0结束 n = ");

        scanf("%d", &n);

        if(n==0) break;

        printf("请输入一维数组中的数据:\n");

        for(i=0; i<n; i++)

            scanf("%d", &a[i]);

        j=10;

        while(j--)//随机交换10次

        {

            p=rand()%n;//产生两个随机数

            q=rand()%n;

            t=a[p];//交换

            a[p]=a[q];

            a[q]=t;

        }

        printf("\n随机交换后数组的元素为:\n");

        for(i=0; i<n; i++)

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

    }

}

追问

首先多谢你的回答
维数是指需要随机排序的元素个数吗?0结束是什么意思?
我看过程序觉得没有问题 编译链接也OK了 但是运行过程中我输入了35个数据 排出来之后两个数据没了 变成两个我没输入的数据 什么情况啊?
然后很不好意思的是 我想问问可以用C语言找到排序的所有可能情况吗?因为我正在做的题目需要对所有情况进行分析 只有一种不行 可以帮帮忙吗?多谢了 我会尽量追加悬赏的

本回答被提问者采纳
第2个回答  推荐于2017-10-10

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int main()

{

int i,j,n,k,t,a[100];

    srand((unsigned) time(NULL)); 

scanf("%d",&n);

k=n; //k:未定顺序的元素个数

for(i=0;i<n;i++)a[i]=i+1;

for(i=0;i<n-1;i++)

{

        j=rand()%k;  //产生0 ~ k-1的随机数j

        t=a[j];a[j]=a[k-1];a[k-1]=t; //将a[j]与“最后一个元素”对换

        k--;

}

for(i=0;i<n;i++)

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

printf("\n");

    system("pause");

    return 0;

}

第3个回答  2015-05-22

利用rand()函数产生随机数字,rand()%n产生小于n的随机数, 然后交换。

下面是我写的程序:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[1000], n, i, j, p, q, t;
    while(1)
    {
        printf("\n\n请输入一维数组的维数,0结束 n = ");
        scanf("%d", &n);
        if(n==0) break;
        printf("请输入一维数组中的数据:\n");
        for(i=0; i<n; i++)
            scanf("%d", &a[i]);
        j=10;
        while(j--)//随机交换10次
        {
            p=rand()%n;//产生两个随机数
            q=rand()%n;
            t=a[p];//交换
            a[p]=a[q];
            a[q]=t;
        }
        printf("\n随机交换后数组的元素为:\n");
        for(i=0; i<n; i++)
            printf("%d ", a[i]);
    }
}

第4个回答  2011-05-08
你可以用random()函数。首先确定你数组中有n个元素,然后让randdom()函数产生从0到n-1的不同的随机数,然后另外设置一个变量,依次调换数组中的值便可追问

多谢 但是二楼给的更详细 所以抱歉啦

相似回答