#8237: [解答] Quick sort


yao99 (yao)

學校 : 臺北市立永春高級中學
編號 : 28114
來源 : [150.116.251.177]
最後登入時間 :
2020-07-16 03:37:57
a233. 排序法~~~ 挑戰極限 -- 24TH 成功電研社內考 | From: [111.184.29.55] | 發表日期 : 2013-09-27 22:27

/*用隨機數把基準換掉就解決了*/
#include <stdio.h>
#include <stdlib.h>
void quickSort(int*a,int n){
  int h=1,e=n-1,k,r;
  r=rand()%n;
  k=a[0];
  a[0]=a[r];
  a[r]=k;
  while(1){
    while(a[h]<=a[0]&&h<n)h++;
    while(a[e]>=a[0]&&e>0)e--;
    if(h>=e)break;
    k=a[h];
    a[h]=a[e];
    a[e]=k;
  }
  k=a[0];
  a[0]=a[e];
  a[e]=k;
  if(e>1)quickSort(a,e);
  if(n-h>1)quickSort(a+h,n-h);
}
int main(int argc, char *argv[])
{
  int *a,n,i;
  scanf("%d",&n);
  a=malloc(sizeof(int)*n);
  for(i=0;i<n;i++){
    scanf("%d",a+i);
  }
  quickSort(a,n);
  for(i=0;i<n;i++){
    printf(i!=n-1?"%d ":"%d",a[i]);
  }
  return 0;
}
 
ZeroJudge Forum