使用vector對數據進行排序(動態排序)


排序思路

頭函數 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),但由於其是動態的,實現了動態的排序(即每輸入一個數據排序一次),在面臨某一類問題前比快排這樣的靜排序好用

這里是快排

這個是快排

這里是動態排序

動態排序

例題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM