效率最高的一种写法,看行了,其中PIVOT的选法还可以扩充,大家可以大胆想象
但是总体思路是取大小为中间值的元素
#include <stdio.h>
int fpivot(int *items,int low,int high)
{
return low;
}
int partition(int *items,int low,int high,int (*pivot)(int *items,int low,int high))
{
int _pivot;
int i,j,r0;
if(low>=high)return low;
i=low;
j=high;
_pivot=pivot(items,low,high);
r0=*(items+_pivot);
*(items+_pivot)=*(items+high);
while(i<j)
{
while(i<j&&*(items+i)<=r0)
i++;
*(items+j)=*(items+i);
while(i<j&&*(items+j)>=r0)
j--;
*(items+i)=*(items+j);
}
*(items+i)=r0;
return i;
}
void quicksort(int *items,int low,int high)
{
int pivot;
if(low>=high)return;
pivot=partition(items,low,high,fpivot);
quicksort(items,low,pivot-1);
quicksort(items,pivot+1,high);
}
void main()
{
int test[]={50,56,1,34,4,5,78,89,2,100,200,5,68,55,55,12};
quicksort(test,0,15);
}