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

 我来答
爱教育爱学习
高粉答主

2019-10-20 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112734

向TA提问 私信TA
展开全部

#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次循环即可排好所有元素。

前端小茶馆
推荐于2017-10-02 · TA获得超过962个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:344万
展开全部

利用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语言找到排序的所有可能情况吗?因为我正在做的题目需要对所有情况进行分析 只有一种不行 可以帮帮忙吗?多谢了 我会尽量追加悬赏的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

推荐于2017-10-10 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#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;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2015-05-22 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:889万
展开全部

利用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]);
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水中泪05
2011-05-08 · 超过12用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:32.7万
展开全部
你可以用random()函数。首先确定你数组中有n个元素,然后让randdom()函数产生从0到n-1的不同的随机数,然后另外设置一个变量,依次调换数组中的值便可
追问
多谢 但是二楼给的更详细 所以抱歉啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式