思想:
1.选定比较值(下为x)
2.分割重排 (标定大小)
3.递归排序
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int q[N],n;
void sort(int q[],int l,int r)
{
if (l>=r) return; //判断返回条件
int x=q[(l+r)/2] , i=l-1,j=r+1;//设置指针和比较值
while(i<j)
{
do ++i;while(q[i]<x);
do --j;while(q[j]>x);//循环条件指向异常值
if(i<j) swap(q[i],q[j]);//交换异常值
}
sort(q,l,j);//递归,左边界 l,右边界 j,排序左侧部分
sort(q,j+1,r);//递归,左边界 j+1,右边界r,排序右侧
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n;
for(int i=0;i<n;i++)
{
cin>>q[i];
}
sort(q,0,n-1);
for(int i=0;i<n;i++)
{
cout<<q[i]<<" ";
}
return 0;
}//我发誓我他妈在用WordPress打代码我就是sb
emm,第一次在博客打代码也是难受坏了.博客的算法内容只是对于近期学习的抽样总结(懒逼,不过应该也没人看,所以能大胆的展示自己菜到什么地步,同时也是看看自己忘记没有),下一次就用在线编译器去写了