7.1快速排序
#include
using namespace std;
void qsort(int,int);
int a[100];
void qsort(int l,int r) //自定义快速排序程序
{
int i,j,mid,p;
i=l;j=r;
mid=(l+r)/2; //当前序列的中间位置的数为中间数
do
{
while(a[i]<a[mid]) i++; //在左半部分寻找比中间数大的数
while(a[j]>a[mid]) j–; //在右半部分寻找比中间数小的数
if (i<=j)
{
int p=a[i]; a[i]=a[j]; a[j]=p;
i++;j–;
}
}while(i<=j); //搜索结束后的结果:以中间数为界,左边数小,右边数大。
if (l<j) qsort(l,j); //若未到左边界,则递归搜索左区间,继续二分排序
if (i<r) qsort(i,r); //若未到右边界,则递归搜索右区间,继续二分排序
}
int main()
{
int n;
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]<<" ";
return 0;
}