33,007
社区成员
发帖
与我相关
我的任务
分享
34 void quick_sort( int* array, int length)
35 {
36 assert( array != NULL );
37 assert( length > 1);
38 sort( array, 0, length );
39 }
40
41
42 void sort(int* array, int begin, int end)
43 {
44 assert( array != NULL );
45 if( begin >= end )
46 return;
47
48 int pivot = partition( array, begin, end);
49
50 sort( array, begin, pivot-1 );
51 sort( array, pivot+1, end );
52
53 }
54
55 int partition( int* array, int begin, int end )
56 {
57 int key = array[begin];
58
59 int i = begin;
60 int j = end;
61
62 while( i < j )
63 {
64 while( array[++i] < key && i < j ) ;
65 while( array[--j] > key && i < j ) ;
66
67 if( i < j )
68 {
69 int tmp = array[i];
70 array[i] = array[j];
71 array[j] = tmp;
72 }
73 }
74
75 array[begin] = array[j];
76 array[j] = key;
77 int k;
78 for( k = 0; k < 20; ++k )
79 printf("%d ",array[k]);
80 printf("\n");
81 return j;
82 }
while( array[++i] < key && i < end ) ;
while( array[--j] > key && begin < j ) ;