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("\n");
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("\n");
102 return 0;
103 }