排序3之快排
快排,据说是平均情况下最好的排序了,算法比较好实现,快排的关键是确定轴的位置,我这里用的轴是在末尾的。
有关快排的资料可以看http://baike.baidu.com/view/19016.htm
根据上图的算法思想(我觉得这种最好写代码了,呵呵)
#include <stdio.h>
#define N 10
#define swap(x,y) {int t=x;x=y;y=t;}
void qs(int l,int r,int *a)
{
if(l>=r) //这是递归的出口
return;
int i=l,j;
for(j=l;j<r;j++)
if(a[j]<a[r])//每次都是和最后那个比较
{
swap(a[j],a[i]);i++;
}
swap(a[r],a[i]);//这步不能忘了
qs(l,i-1,a);//递归调用
qs(i+1,r,a);//递归调用
}
int main()
{
int a[N];
int i;
for(i=0;i<N;i++)//这里是数据的输入
scanf("%d",&a[i]);
qs(0,N-1,a); //快排
for(i=0;i<N;i++)//显示结果
printf("%d ",a[i]);
return 0;
}
------江财小子