用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次循环即可排好所有元素。
利用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语言找到排序的所有可能情况吗?因为我正在做的题目需要对所有情况进行分析 只有一种不行 可以帮帮忙吗?多谢了 我会尽量追加悬赏的
#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;
}
利用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]);
}
}
多谢 但是二楼给的更详细 所以抱歉啦