具体理解过程参考博客点击打开链接
直接贴代码:
#include<iostream>
using namespace std;
int n;
int a[101];
void quicksort(int left,int right)
{
int i,j,temp,t;
if(left>right)//当left大于right,即没有元素要排序时结束递归
return;
i=left;
j=right;
temp=a[left];
while(i!=j)//当相遇时结束循环
{
while(a[j]>=temp&&i<j)//从右边开始找小于temp的数
j--;
while(a[i]<=temp&&i<j)//从左边开始找大于temp的数
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//将基值放到正确位置
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);//将左半边部分排序
quicksort(i+1,right);//将右半边部分排序
}
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
cin>>a[i];
quicksort(1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}
需要注意的问题是要先从右边查找,再从左边查找
原因:结束循环时两边停在同一个数,因为这个数要跟基值交换,因此必须要小于基值,那么就必然是让右边先停,因为右边停下来的数一定是小于基值的数