//一直都用的C标准库的快排,今天自己手打一遍,看看到底自己退化了没有....好吧。经典的分治思想,时间复杂度应该是 T(n) = Cn + T(k) + T( n-k) k 为枢轴
#include <stdio.h>
#include <stdlib.h>
int a[10] = { 1, 10, 3, 9, 18, 2, 7, 9, 0, 10 };
void qsort( int a[], int begin, int end )
{
int i, j, key;
if( begin > end )
return ;
i = begin;
j = end;
key = a[i];
while( i < j )
{
while( i<j && a[j] > key )j--;
if(i<j) a[i++]=a[j];
while( i<j && a[i] < key)i++;
if (i<j) a[j--]=a[i];
}
a[i] = key;
if( begin < i-1 )
qsort( a, begin, i-1 );
if( i+1 < end )
qsort( a, i+1, end );
}
int main()
{
int i;
printf( "before sort:\n" );
for( i = 0; i < 10; i++ )
printf( "%d ", a[i] );
printf( "\n" );
qsort( a, 0, 9 );
printf( "after sort:\n" );
for( i = 0; i < 10; i++ )
printf( "%d ", a[i] );
printf( "\n" );
while(1);
return 0;
}
//次快速排序为原地快速排序,即不需要其他存储空间, 所以在key的选择上是固定的选第一个元素,然后指针也必须从最后一个元素开始扫