看了网上很多的快速排序代码,都是前后扫描改分割位的。看了算法导论,顺其思路的C代码~

#include <stdio.h>
int a[8]={3,5,4,8,1,2,0,7};
void quicksort(int* a,int p,int r)
{
int q;
if (p<r)
{
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int partition(int* a,int p,int r)
{
int x=a[r];
int i=p-1;
int temp;
int j;
for (j=p;j<r;j++)
{
if (a[j]<=x)//小于哨兵的都交换到前面去
{
++i;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;//和默认的哨兵换位
return i+1;
}
void main()
{ int k;
quicksort(a,0,7);
for(k=0;k<8;k++)
{
printf("%d\n",a[k]);
}
}