快速排序
#include <stdio.h>
void swap(int*a,int*b);
int partition(int a[],int p ,intr);
void quicksort(int a[],int p,int r);
int main()
{
int i;
int k[6]={10,2,15,7,8,13};
quicksort(k,0,5);
for(i=0;i<6;i++){
printf("%d ",k[i]);
}
return 0;
}
void swap(int*a,int*b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int partition(int a[],int p,int r)
{
int x=a[r];
int i=p-1;
int j;
//当a[j]>x时,不用做任何操作,仅仅是j的计数在递增
for(j=p;j<r;++j){
if(a[j]<=x){
i+=1;
swap(&a[i],&a[j]);
}
}
swap(&a[i+1],&a[r]);
return i+1;
}
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);
}
}