快速排序

  1. int HandShake( int* array, int start, int end ){
  2.   int tmp=array[start];//将首个元素作为中间值,并寄存起来
  3.   do{
  4.     while( array[end]>=tmp && start<end ) end--;
  5.     if( start<end )
  6.       {array[start]=array[end];//发现一个小的,丢到前面去
  7.        start++;}//不加也可以,不过既然丢过来的,那一定符合要求
  8.     while( array[start]<=tmp && start<end ) start++;
  9.     if( start<end )
  10.       {array[end]=array[start];//大的就丢到后面去,这么丢来丢去就造成了不稳定
  11.        end--;}
  12.   }while(start<end);
  13.   array[start]=tmp;//最后结束时一定是start==end
  14.   return start;
  15. }
  16. void Quicksort( int* array, int start, int end ){
  17.   if(start<end){//这相当于设立了递归终止条件
  18.     int mid=HandShake(array,start,end);
  19.     Quicksort(array,start,mid-1);//用到了递归,很漂亮
  20.     Quicksort(array,mid+1,end);
  21.   }
  22. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值