首页 > 编程语言 > 详细

使用vector对数据进行排序(动态排序)

时间:2021-04-22 23:49:33      阅读:36      评论:0      收藏:0      [点我收藏+]

排序思路

头函数 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),但由于其是动态的,实现了动态的排序(即每输入一个数据排序一次),在面临某一类问题前比快排这样的静排序好用

?

这里是快排

技术分享图片
?

这里是动态排序

技术分享图片
?
例题

使用vector对数据进行排序(动态排序)

原文:https://www.cnblogs.com/GlareGlimmering/p/14691826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!