sort垃圾滚粗
1.思路,将当前元素插入第一个大于等于它的元素的前面,如果没有,那么他是最大的,直接放在队伍后面,可用lower_bound实现二分查找
2.时间复杂度良好,空间复杂度一般,稳定排序
模板:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,x,a[1000005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
int kk=lower_bound(a+1,a+1+i,x)-a;
if(kk>i)
{
a[i]=x;
}
else{
for(int j=i;j>kk;j--)//注意这里是倒叙,否则后面的永远会被第一个更新!
{
a[j]=a[j-1];
}
a[kk]=x;
}
}
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}