关于一个快速排序的C++问题

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:53:42
#include<iostream.h>
void qsort(int a[],int left,int right);
void main()
{
int a[9]={8,3,9,7,25,100,26,39,2 },len,i;
len=sizeof(a)/sizeof(int);
cout<<"排序前:"<<endl<<'\n';
for(i=0;i<len;i++)
cout<<a[i]<<",";
cout<<'\b'<<' '<<endl<<endl<<endl;
qsort(a,0,len-1);
cout<<"排序后: "<<endl<<endl;
for(i=0;i<9;i++)
cout<<a[i]<<",";
cout<<'\b'<<" ";
cin.get();

}

void qsort(int a[],int left,int right)
{
int l,r,midpoint,temp;
l=left;
r=right;
midpoint=a[(left+right)/2];
while(l<r)
{
while(a[l]>midpoint) ++l;
while(a[r]<midpoint) --r;
if(r==l) break;
temp=a[l];
a[l]=a[r];
a[r]=temp;
++l;

l和r是指向第一项和最后一项的

这个显然用的是递归

就是每次排序找出这一段的第一个数的正确位置

然后将这个数的左右分为2段,将2段中的第一个找到正确位置,然后再。。。

l和r是标记用的,具体方法看看书吧