请教快速排序法的问题
书上有个例子,但其中有两句看不太明白,已在注释中说明,麻烦大家指点一下。谢谢!//快速排序例子如下
#include <istream.h>
void qsort(int[],int,int);
void main()
{
int a[]={55,2,6,4,32,12,9,73,26,37};
int len=sizeof(a)/sizeof(int);
qsort(a,0,len-1);
for(int i=0;i<len;i++)
cout<<a[i];
}
void qsort(int a[],int left,int right)
{
int pivot,l,r,temp;
l=left;
r=right;
pivot=a[(left+right)/2];
ap=a[pivot]; /* */
while(l<r)
{
while(a[l]<ap) ++l; /* */
while(a[r]>ap) --r; /* */
if(l>;=r) break;
temp=a[l];
a[l]=a[r];
a[r]=temp;
if(l!=pivot)--r;//这句和下面那句看不太明白,为啥是l不等于pivot的时候才--r?
if(r!=pivot)++l;//和上句类同,为啥是r不等于pivot才执行++l啊?
}
if(l==r) l++;
if(left<r) qsort(a,left,l-1);
if(l<right) qsort(a,r+1,right);
}
// 想问一下,上面有注释所在的那两句中,执行++l和--r是不是为了避免遇到数组其他位置的元素等于a[pivot]时无法继续下去,不知道这样理解对吗?
// 但为什么要有l和r不等于pivot的条件?
// 谢谢!!
[[it] 本帖最后由 tjxix 于 2008-10-6 17:32 编辑 [/it]]