快排的标准写法,防止以后忘记
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[100010],n;//定义全局变量,这两个变量需要在子函数中使用
void quick(int left,int right)
{
int temp,i,j,t;
temp=a[left];//temp中存的就是基准数
if(left>right)
{
return ;
}
i=left;j=right;
while(i!=j)
{
//顺序很重要,先从右往左找
while(a[j]>=temp&&i<j)
{
j--;
}
//再从左往右找
while(a[i]<=temp&&i<j)
{
i++;
}
//交换两个数在数组中的位置
if(i<j)//当哨兵i,j没有相遇时
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最后将基准位归位
a[left]=a[i];
a[i]=temp;
quick(left,i-1);//继续处理左边的这是一个递归的过程
quick(i+1,right);//继续处理右边的,这是一个递归的过程
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quick(1,n);
for(int i=1;i<=n;i++)
{
printf("%d\n",a[i]);
}
return 0;
}