排序思路
頭函數 algorithm 中有一個函數是 upper_bound(start,end,value)
它可以返回區間 [start,end] 中第一個大於等於 value 的值的位置
再加上 vector 中自帶的插入函數 insert(space,value) 就可以對數據進行類似於二分排序的排序
時間復雜度(預期):n * logn * logn
代碼如下
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
vector<int> asd;
inline int read() //快讀加速
{
char ch=getchar();
int res(0),status(1);
while(ch<'0'||ch>'9')
{
if(ch=='-')
status=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
res=res*10+ch-'0';
ch=getchar();
}
return status*res;
}
int main()
{
int n;
n=read();
for(register int i=1,t;i<=n;i++)
t=read(),
asd.insert(upper_bound(asd.begin(),asd.end(),t),t);
for(vector<int>::iterator it=asd.begin();it!=asd.end();it++)
printf("%d ",*it);
return 0;
}
很顯然,vector排序在時間復雜度( n * logn * logn)上遜色於快排( n * logn),但由於其是動態的,實現了動態的排序(即每輸入一個數據排序一次),在面臨某一類問題前比快排這樣的靜排序好用
這里是快排