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