1 #include<stdio.h> 2 3 4 5 /******************************* 6 快排 7 *************************************/ 8 int quicksort_up(int a[],int f1,int f2) 9 { 10 int i=f1-1,j=f2,v=a[f2],t; 11 for(;;) 12 { 13 while(a[++i]<v); 14 while(a[--j]>v) 15 { 16 if(j==f1) 17 break; 18 } 19 if(i>=j)break; 20 t=a[i]; 21 a[i]=a[j]; 22 a[j]=t; 23 } 24 t=a[i]; 25 a[i]=a[f2]; 26 a[f2]=t; 27 return i; 28 } 29 int quicksort_down(int a[],int f1,int f2) 30 { 31 int i=f1,j=f2+1,v=a[f1],t; 32 for(;;) 33 { 34 while(a[--j]<v); 35 while(a[++i]>v) 36 { 37 if(i==f2) 38 break; 39 } 40 if(i>=j)break; 41 t=a[i]; 42 a[i]=a[j]; 43 a[j]=t; 44 } 45 t=a[j]; 46 a[j]=a[f1]; 47 a[f1]=t; 48 return j; 49 } 50 51 52 void partition_up(int a[],int first,int last) 53 { 54 int i; 55 if(first<last) 56 { 57 i=quicksort_up(a,first,last); 58 partition_up(a,first,i-1); 59 partition_up(a,i+1,last); 60 } 61 } 62 63 64 void partition_down(int a[],int f1,int f2) 65 { 66 int i; 67 if(f1<f2) 68 { 69 i=quicksort_down(a,f1,f2); 70 partition_down(a,f1,i-1); 71 partition_down(a,i+1,f2); 72 } 73 } 74 75 int main() 76 { 77 78 int n=5,a[15]; 79 int i; 80 for(i=0;i<n;i++) 81 { 82 scanf("%d",&a[i]); 83 } 84 85 partition_up(a,0,n-1); 86 87 for(i=0;i<5;i++) 88 { 89 printf("%d ",a[i]); 90 } 91 printf(" "); 92 93 partition_down(a,0,n-1); 94 95 for(i=0;i<n;i++) 96 { 97 98 printf("%d ",a[i]); 99 100 } 101 printf(" "); 102 return 0; 103 }