CSDN博客

img grayloach1

快速排序之我的快速排序

发表于2004/10/25 16:53:00  2479人阅读

钱能书中的
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);
}

阅读全文
0 0

相关文章推荐

img
取 消
img