C语言。用随机函数rand产生50个10-99的互不相同的整数放入数组a,按从大到小排序,并按每行10个输出。

如题所述

#include<stdio.h>

#include<time.h>

#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[100];

 srand((unsigned)time(NULL));

 k=100;

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

  a[i]=i;

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

 {

  temp=rand()%k;

  tab[i]=a[temp];

  {

   for(m=temp+1;m<k;m++)

   {

    a[m-1]=a[m];

   }

  }

  k--;

 }

 printf("\n排序前元素值:\n");

 print();

 

}

void exchange(int*a,int*b)

{

 int temp=0;

 temp=*a;

 *a=*b;

 *b=temp;

}

 

int partition(int*a,int p,int r)

{

 

 int temp=0,i=0,j=0;

 temp=a[r];

 i=p-1;

 for(j=p;j<r;j++)

 {

  if(a[j]>=temp)

  {

   i++;

   exchange(&a[i],&a[j]);

  } 

 

 }

 exchange(&a[i+1],&a[r]);

 return i+1;

}

 

void quicksort(int*a,int p,int r)

{

 int q=0,i=0;

 if(p<r)

 {

 

  q=partition(a,p,r);   

  quicksort(a,p,q-1); 

  quicksort(a,q+1,r); 

 }

}

 

void sortprint(void)

{

  printf("\n排序后元素值:\n");

  print();

}

int main()

{

 init();

 quicksort(tab,0,num-1);

 sortprint();

 return 0;

}

 

 

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答