c语言生成50个随机数,对随机数进行快速排序。

作者&投稿:夙郭 (若有异议请与网页底部的电邮联系)
c语言生成10个随机整数,并对随机数进行冒泡和快速排序。有讲解更好,纯新手。~

终于写完了...累死了,不过我得说一句,你这个分太少,一般不会有人像我这么无聊的..呵呵

#include
#include
#include
#define Recordtype int
void copy(Recordtype s[], Recordtype d[], int n);
/************************************************************************/
/* 直接插入法 */
/************************************************************************/
int cmpTforIs = 0;//记录插入法的比较次数
int ChgTforIs = 0;//记录插入法的交换次数
void InsertSort(Recordtype data[], int n);

/************************************************************************/
/* 折半插入法 */
/************************************************************************/
int cmpTforBinarys = 0;//记录冒泡的比较次数
int ChgTforBinarys = 0;//记录冒泡的交换次数
void BinarySearchInsertion(int numbers[], const int n);
/************************************************************************/
/* 冒泡法 */
/************************************************************************/
int cmpTforBs = 0;//记录冒泡的比较次数
int ChgTforBs = 0;//记录冒泡的交换次数
void Bubsort(Recordtype *start, Recordtype *end);
/************************************************************************/
/* 快排 */
/************************************************************************/
int cmpTforQs = 0;//记录快排的比较次数
int ChgTforQs = 0;//记录快排的交换次数
int quickPass(int start, int last, Recordtype record[]);
int quickSort(int start, int last, Recordtype record[]);
int main()
{
Recordtype Data[100];
Recordtype D[100];
srand(time(NULL));
printf("the rand 100 numbers are:
");
for (int i=0; i<100; i++)
{
D[i] = rand()%1000;//便于观察,每次产生1000内的整数
printf("%d ", D[i]);
}
printf("


");

copy(D, Data, 100);
BinarySearchInsertion(Data, 100);
printf("折半插入法的比较次数为%d,交换次数为%d
", cmpTforBinarys, ChgTforBinarys);

copy(D, Data, 100);
InsertSort(Data, 100);
printf("直接插入法的比较次数为%d,交换次数为%d
", cmpTforIs, ChgTforIs);

copy(D, Data, 100);
Bubsort(&Data[0], &Data[99]);
printf("冒泡法的比较次数为%d,交换次数为%d
", cmpTforBs, ChgTforBs);

copy(D, Data, 100);
quickSort(0, 99, Data);
printf("快排的比较次数为%d,交换次数为%d
", cmpTforQs, ChgTforQs);

printf("排序后的序列为
");//你可以这块放在任意排序完毕的语句后面,检查排序的正确性
for (i=0; i<100; i++)
{
printf("%d ", Data[i]);
}
return 0;
}
void copy(Recordtype s[], Recordtype d[], int n)
{
for (int i = 0; i<n; i++)
{
d[i] = s[i];
}
}

void BinarySearchInsertion(int numbers[], const int n)
{
int middle=0;
for(int i = 1; i < n; i++)
{
int low = 0 ;
int high = i-1 ;
int temp = numbers[i] ;
while(low <= high)
{
cmpTforBinarys++;
middle = (low + high) / 2 ;
if(temp < numbers[middle])
{
high = middle - 1 ;
}
else
low = middle + 1 ;
}
for(int k = i ; k >middle; k--) //K>middle不能错
{
ChgTforBinarys++;
numbers[k] = numbers[k-1 ] ;
}
ChgTforBinarys++;
numbers[low] = temp ; //此处用 numbers[high+1] = temp ;也可
} //赋值语句不能弄错numbers[low]=
}

void InsertSort(Recordtype data[], int n)
{
for (int i = 1; i< n; i++)
{
int temp = data[i];
for(int j = i; j>0 && temp<data[j-1]; --j)
{
ChgTforIs++;
cmpTforIs++;
data[j] = data[j-1];
}
data[j] =temp;
}
}

void Bubsort(Recordtype *start, Recordtype *end)
{
int num = end - start + 1;
Recordtype temp;
int i, j;
Recordtype *a = start;
for (i = 0; i<num; i++)
{
for (j = 0; j<num-i; j++)
{
cmpTforBs++;
if (*(a+j-1) > *(a+j))
{
ChgTforBs++;
temp = *(a+j-1);
*(a+j-1) = *(a+j);
*(a+j) = temp;
}
}
}
}

int quickPass(int start, int last, Recordtype record[])
{
int s = start, l = last;
int temp = record[s];
while (s < l)
{
while (s<l && temp <= record[l] )
{
l--;
cmpTforQs++;
}

if (s<l)
{
record[s++] = record[l];
ChgTforQs++;
}

while (s= record[s])
{
s++;
cmpTforQs++;
}
if (s<l)
{
record[l--] = record[s];
ChgTforQs++;
}
}
record[s] = temp;
ChgTforQs++;
return s;
}
int quickSort(int start, int last, Recordtype record[])
{
int pos = 0;
if (start < last)
{
pos = quickPass(start, last, record);
quickSort(start, pos-1, record);
quickSort(pos+1, last, record);
}
return 0;
}

10W个。。。排序。。。
好吧 math.h 里面好像有个方法rand() 这个是生成随机整数的。。你调用过10W次吧。。然后 排序 用快速排序吧。。这是我能想到的。。 应该有更简单的方法 坐等达人来讲解。。

楼下的几个回答我怎么看也不是快速排序,所以我做了一个用快速排序法排序的程序

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define LEN 50

//快速排序(升)

void quicksup(int *arr,int low,int high)

{

    int temp,l,r;

if(low<high)

{

l=low;

r=high;

temp=arr[low];

while(low<high)

{

while(low<high&&arr[high]>=temp)

high--;

if(low<high)

arr[low]=arr[high];

while(low<high&&arr[low]<=temp)

low++;

if(low<high)

arr[high]=arr[low];

}

arr[low]=temp;

quicksup(arr,l,low-1);

quicksup(arr,low+1,r);

}

}

//快速排序(降)

void quicksdown(int *arr,int low,int high)

{

    int temp,l,r;

if(low<high)

{

l=low;

r=high;

temp=arr[low];

while(low<high)

{

while(low<high&&arr[high]<=temp)

high--;

if(high==LEN)

high--;

if(low<high)

arr[low]=arr[high];

while(low<high&&arr[low]>=temp)

low++;

if(low<high)

arr[high]=arr[low];

}

arr[low]=temp;

quicksdown(arr,l,low-1);

quicksdown(arr,low+1,r);

}

}

//初始化数组

void init(int *arr,int len)

{

int i;

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

{

arr[i]=rand()%1000;

}

}

//打印数组元素

void print(int *arr,int len)

{

int i;

printf("
 ");

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

printf("%4d  ",arr[i]);

printf("
");

}

int main()

{

int arr[LEN];

srand((unsigned)time(NULL));

init(arr,LEN);

printf("排序前:");

print(arr,LEN);

quicksup(arr,0,LEN);

printf("排序后(升):");

print(arr,LEN);

quicksdown(arr,0,LEN);

printf("排序后(降):");

print(arr,LEN);

return 0;

}



#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 50

int cmp1(const void *x,const void *y)
{
return *(int *)x-*(int *) y;
}
int cmp2(const void *x,const void *y)
{
return *(int *)y-*(int *)x;
}
int main()
{
int i,a[N];
srand(time(0));
for(i = 0;i<N;i++)
a[i] = rand();
qsort(a,N,sizeof(int),cmp1);
printf("升序序列:");
for(i = 0;i<N;i++) printf("%d ",a[i]);
printf("
");
qsort(a,N,sizeof(int),cmp2);
printf("降序序列:");
for(i = 0;i<N;i++) printf("%d ",a[i]);
printf("
");
return 0;
}

望采纳



#include<stdio.h>
#include<time.h>

int main(){
int y[50],t;
int i,j;
srand((unsigned)time(NULL));
for (i=0;i<50;i++) y[i]= rand();
for (i=0;i<49;i++)
for (j=i+1;j<50;j++)if (y[j]<y[i]) {t=y[i];y[i]=y[j];y[j]=t;};
for (i=0;i<50;i++) {if (i%10==0)printf("\n");printf("%d ",y[i]);}
printf("\n");
for (i=0;i<49;i++)
for (j=i+1;j<50;j++)if (y[j]>y[i]) {t=y[i];y[i]=y[j];y[j]=t;};
for (i=0;i<50;i++) {if (i%10==0)printf("\n");printf("%d ",y[i]);}
return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 50
void main() { int a[N],i,j,k;
srand((unsigned int)time(NULL));
for ( i=0;i<N;i++ ) a[i]=rand()%1000;
for ( i=0;i<N-1;i++ ) for ( j=i+1;j<N;j++ ) if ( a[i]>a[j] ) {k=a[i];a[i]=a[j];a[j]=k;} )
for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\n");
for ( i=0;i<N-1;i++ ) for ( j=i+1;j<N;j++ ) if ( a[i]<a[j] ) {k=a[i];a[i]=a[j];a[j]=k;} )
for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\n");
}


C语言 编写程序利用rand()函数产生50个100以内的随机数,将其中的奇数写...
修改后的C语言代码如下,只修改了一处地方,即删除了“return 0;“。include <stdio.h>#include <stdlib.h>#include void main(){int i,j;int x[50];int n=50;FILE *fp;srand((unsigned)time(NULL));\/\/ 用当前时间来产生随机数种子,这样每次用本程序产生的随机数序列 将不同,更随机。f...

用C语言定义一个50个数的数组,用1~100之间的随机数填充,要求这50个数...
数组初始化为0,用 memset 等方法 随机数用 srand rand 得到,然后将数组对应的元素设置为1 解决冲突判断数组对应位置有无设置为1 排序输出在数组置1过程中就实现了

vb语言,要求利用系统时间随机生成五十个0~1之间的伪随机数(包括...
For i = 1 To 50 seed = Second(Now()) '取当前的秒为种子 Randomize (seed) ‘初始化种子 Form1.Print Format(Rnd(), "0.00000000") ’获取0~1之间的随机数 Next i

c语言中怎么求随机产生50个10以内的整数,输出其中重复次数最多的数...
设置一个数组用于记录某个数出现的次数 int num[50]={0};srand(time());int i=rand()%10;for (int j=0; j<50;j++){ num[j]++;}

c语言 产生一个1~50的随机数
{ temp=rand(); \/*产生随机数*\/ if(temp>0&&temp<51){ i=temp;printf("i为%d。\\n是否退出?1.是;2.否。请选择:",i); \/*判断是否结束循环*\/ scanf("%d",&temp);if(temp==1)tag=0;} } }

C语言使用随机函数rand()产生50个10~99的互不相同的随机整数放入数组a...
(NULL));for(i=0;i<50;i++){a[i]=rand()%90+10;for(j=0;j<i-1;j++) if (a[i]==a[j]) i--;}printf("nafter:\\n");for(i=0;i<50;i++) \/\/ 下面这是打印输出{if (i%10==0) \/\/ 十个数字换行printf("\\n");printf("%d "...

C语言:用stdlib.h里的random随机函数产生指定一个范围的随机数怎么用...
函数名:random 功 能:随机数发生器 用 法:int random(int num);程序例:include <stdlib.h> include <stdio.h> include \/ prints a random number in the range 0 to 99 \/ int main(void){ randomize();printf("Random number in the 0-99 range:d\\n",random (100));return 0;} ...

C语言。用随机函数rand产生50个10-99的互不相同的整数放入数组a,按...
include<stdio.h>#include include<stdlib.h> int tab[50];int num=50;void print(void){ int i=0,j=0;for(i=0;i<num;i++) { printf("%5d ",tab[i]);j++;if(j%10==0)putchar('\\n');} putchar('\\n');} void init(void){ int i=0,j=0,k=0,m=0,temp;int a[10...

c语言中的随机函数如果随机了50次,怎么把随机的这50个数加在一起
只要每次随机累加即可。写成函数如下:int func(void){ int r = 0; int n,i; for(i = 0; i < 50; i ++)\/\/执行50次 { n = rand();\/\/获取一个随机数。 r+=n;\/\/累加。 } return r;\/\/将结果返回。} ...

你好,怎样用c语言输出一个1到100的随机数
}while(j<i); } for(i=0;i<10;i++) printf("%4d",a[i]); } 用c语言出一个随机数,怎么编 你说产生一个随即数,还是产生很多随即数,然后排序?然后还要查找?查找什么数?题目说清楚ok? 产生50个随即数,然后排序可以办到,那么查找显示出什么数? 根据你的要求题意,程序...

福鼎市17595517030: c语言生成50个随机数,对随机数进行冒泡和双向冒泡排序 -
连菊嘉比: 冒泡法进行升序排序,双向冒泡法进行降序排序.#include #include void rndData(int data[], int length){ int i; for(i=0;i data[i] = rand()% 100 + 1;//[1, 100] } } void printData(int data[], int length){ int i; for(i=0;i printf("%4d", data[i]); if((i+1)%10 == 0){ ...

福鼎市17595517030: c语言中的随机函数如果随机了50次,怎么把随机的这50个数加在一起 -
连菊嘉比: 只要每次随机累加即可.写成函数如下:int func(void) { int r = 0;int n,i; for(i = 0; i { n = rand();//获取一个随机数. r+=n;//累加. } return r;//将结果返回.}

福鼎市17595517030: C语言编程用随机函数rand(),产生50个随机整数,并依产生的次序放入一数组中用随机函数rand(),产生50个随机整数,并依产生的次序放入一数组中.. -
连菊嘉比: 产生50随机数: int a[50]; srand(time(NULL)) ; for(int i=0;i<50;i++) a[i]=rand();

福鼎市17595517030: 生成50个1到100之间的随机数,并且对其中的偶数进行降序排列 -
连菊嘉比: #include <ctime>#include <iostream>#include <cstdlib>using namespace std; int main(){ int a[50],b,c[50]; //50个1到100的随机数 srand(time(0)); for(int i = 0;i < 50;i++) { b = (rand ()%100) + 1; a[i] = b; cout << a[i] << " "; } cout << endl;//打印出里...

福鼎市17595517030: C语言编程:使用随机函数rand()产生50个10~99的互不相同的随机整数 -
连菊嘉比: 代码如下: #include <stdio.h> #include<time.h> #include<stdlib.h> void main() { int i,j; srand((int)time(0)); for (i=0; i<50; i++) { j=1+(int)(100.0*rand()/(RAND_MAX + 10.0)); printf("%d\n", j); } }

福鼎市17595517030: 怎么用C语言生成随机数? -
连菊嘉比: 生成1~13的随机数,随机数序列中没有重复字数 #include <stdio.h> #include <stdlib.h> // 包含rand()函数说明 #include <time.h> #define N 13 void main( void ) { inti, j, num[N], tmp; //用当前时间种子重置随机数生成器,使每次运行生成不同的...

福鼎市17595517030: 如何在C语言中生成一定范围内的随机数? -
连菊嘉比: srand((int)time(NULL));设定随机数种子 rand()%100;产生0-99的随机数. 高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到).其他情况如法炮制!C语言中用rand()函数产生20-90的随机整数 20-90共有71个数字,所以是rand()%71+20 ; 用rand()生成-20-20的随机数 -20-20共有41个数字,所以是rand()%41-20; 需要注意的是,在运行以上代码之前最好设定一下: srand(time(NULL));//用系统当前时间设置rand()随机序列种子,保证每次运行随机序列不一样

福鼎市17595517030: 怎样用c语言产生一个0到100的随机数 -
连菊嘉比: rand()函数,头文件stdlib.hint num; num = rand()%100;

福鼎市17595517030: c语言产生N个随机数 -
连菊嘉比: #include #include void main(){ int i; srand((unsigned)time(NULL)); for(j=1;j<=5;j++) printf("%d",rand()%10); printf("\n"); } 随即产生数字,字符么就是把%d改成%c.产生几个随即数用循环i控制; 一个随即数有几个数字组成就是对rand()取模;

福鼎市17595517030: c语言产生50个100~200间的随机数,并存入数组中,我的代码,怎么改错 -
连菊嘉比: 有两处错误 1:用了#include <stdlib.h>那么就不能用rand当变量名了,和库函数rand冲突了,还有要用srand初始化下种子 2 输出时printf不在for循环里面,加个括号: #include<stdio.h> #include<stdlib.h> #include <time.h> //time()头文件 void ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网