今天才学习了快排,参考了《算法导论》。
对于n个数的输入数组,最坏的情况运行时间是O(n^2),期望的运行时间为O(nlogn)。
用C实现了下。继续努力。。。
#include <stdio.h>
#include <string.h>
int partition ( int *a, int p, int r ) {
int x = a[r];
int i = p - 1;
int tmp;
for ( int j = p; j <= r - 1; ++j )
if ( a[j] <= x ) {
i = i + 1;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
tmp = a[i + 1], a[i + 1] = a[r], a[r] = tmp;
return i + 1;
}
void Qsort ( int *a, int p, int r ) {
int q;
if ( p < r ) {
q = partition ( a, p, r );
Qsort ( a, p, q - 1 );
Qsort ( a, q + 1, r );
}
}
int main ( ) {
int n;
while ( scanf ( "%d", &n ) != EOF ) {
int a[n];
for ( int i = 1; i <= n; ++i )
scanf ( "%d", &a[i] );
Qsort ( a, 1, n );
for ( int i = 1; i <= n; ++i )
printf ( "%d ", a[i] );
printf ( "\n" );
}
}