模板
这个模板采用了随机化的思路,相当于是不保存轴点的位置信息。这或许说明Partition算法不能使用随机化的思路减小qsort的不稳定性。
#include<iostream>
using namespace std;
int n,a[101];//正式提交的时候,要注意数组大小和数据类型
void qsort(int l,int r)//应用二分思想:其实不是严格的二分思想,这里只是借中点作为轴点的候选点
{
int mid=a[(l+r)/2];//中间数,相当于是随机化,减小了完全倒序带来的复杂度增加的恶劣情况
int i=l,j=r;
do{//这里也可以直接使用while(i < j),而且i <= j 也是多余的。毕竟i=j直接就相当于退出了,为什么还要进循环浪费时间呢?
while(a[i]<mid) i++;//查找左半部分比中间数大的数
while(a[j]>mid) j--;//查找右半部分比中间数小的数
if(i<=j)//如果有一组不满足排序条件(左小右大)的数
swap(a[i++],a[j++]);//交换
} while(i < j);
//本次结束后,i左侧的都小于等于中间数,j右侧的都大于等于中间数。所以相当于也构造出了一个轴点(i或j)
if(l<j) qsort(l,j);//递归搜索左半部分
if(i<r) qsort(i,r);//递归搜索右半部分
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
qsort(1,n);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}