64,654
社区成员
发帖
与我相关
我的任务
分享
int level = 0;
int pivot;
int* l;
int* r;
void sort( int* a, int n )//快速排序函数
{
if( n<=2 ){//不超过两个数据就处理完毕
if( n==2 && a[1] < a[0] ) swap(a, a+1);
return;
}
swap( a, a+(n>>1) );//把中间的那个数据交换到最前面
pivot=*a;//以现在最前面的数据作为分界值
l=a+1;//左边第二个数据
r=a+n-1;//右边最后一个数据
while( l<r )//把数据分组
{
//小于分界值的留在左边,遇到不小于的停止
while( l<r && *l<pivot ) l++;
//不小于分界值的留在右边,遇到小于的停止
while( r>a && *r>=pivot ) r--;
//交换这两个数据
if( l<r ) swap( l, r );
}
//把分界值交换回中间位置
if( *a > *r ) swap( a, r );
//对左右两组分别递归排序
sort( a, r-a );
sort( r+1, n-1-(r-a) );
}