快速排序之我的快速排序

钱能书中的
void qsort(int a[], int left, int right)
{
 int pivot,l,r,temp;
 l=left;
 r=right;
 pivot=a[(left+right)/2];

 while(l<r)
 {
  while (a[l]<pivot) ++l;
  while (a[r]>pivot) --r;

  if (l>=r) break;

  temp=a[l]; a[l]=a[r]; a[r]=temp;

  if (l!=pivot) --r;
  if (r!=pivot) ++l;
 }

 if(l==r) l++;
 if(left<r) myqsort1(a,left,l-1);
 if(l<right) myqsort1(a,r+1,right);
}
钱能这个有错,比如{26,55,2,26,26,6,-5,4,26,32,12,9,73,26,37}这组就不能正确的排出来;

//===========================================
//  这个是c++ primer的, 以下代码摘于IntArray.c文件
//===========================================

//……
void
IntArray::
sort( int low, int high )
{
    if ( low >= high ) return;
    int lo = low;
    int hi = high + 1;
    int elem = _ia[low];
 
    for ( ;; )
 {  
  while ( _ia[++lo] < elem ) ;
  while ( _ia[--hi] > elem ) ;
  if ( lo < hi )
   swap( lo,hi );
  else break;
  
    } 
 
    swap( low, hi );
    sort( low, hi-1 );
    sort( hi+1, high );
}
//……

我自己也写了一个:
void myqsort3(int a[], int left, int right)
{
 int pivot=a[right],l=left,r=right,temp;
 while (l<r)
 {
  while (l<r && a[l]<=pivot) ++l;
  while (l<r && a[r]>pivot) --r;
  if(l!=r)
  {
   temp=a[l]; a[l]=a[r]; a[r]=temp;
  }
 }

 if(left<l) myqsort3(a,left,l-1);
 if(right>r) myqsort3(a,r,right);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值