原创:快速排序的实现

来源:互联网 发布:网络原创歌手 编辑:程序博客网 时间:2024/05/17 23:39

 

效率最高的一种写法,看行了,其中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);
}