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

(1)要求待排序的数据随机生成。
(2)分别完成升序和降序排序。

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

#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("\n  ");

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

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

printf("\n");

}

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;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-15
#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("\n");
qsort(a,N,sizeof(int),cmp2);
printf("降序序列:");
for(i = 0;i<N;i++) printf("%d ",a[i]);
printf("\n");
return 0;
}

望采纳

本回答被提问者采纳
第2个回答  2016-12-15
#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;
}
第3个回答  2016-12-15
#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");
}
相似回答