归并排序的vector写法和queue写法

归并排序比如3 2 4 1 5,原理就是先把他分成两段,3 2一段, 4 1 5一段,然后对每一段再进行分段,比如3 2 分成3的一段和2的一段,不停的分,直到一段中只有一个数,然后再对两段进行排序,合并,就可以很容易的想到递归的写法;

queue队列的写法

#include <bit/sdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
long long  a[N], n,result[N];
queue<int> gbpx(int left, int right)
{
	if (right - left > 0)
	{
		ll mid = left + right + 1 >> 1;
		queue<int> l=gbpx(left, mid - 1);
		queue<int> r=gbpx(mid, right);
		queue<int> s,*ps;
		while (l.size() && r.size())
		{
			int n;
			(l.front() > r.front()) ? (n=r.front(),r.pop()) : (n=l.front(),l.pop());
			s.push(n);
		}
		if (l.size())
		{
			ps = &l;
		}
		else
			ps = &r;
		while (ps->size())
		{
			s.push(ps->front());
			ps->pop();
		}
		return s;
	}
	else
	{
		queue<int> s;
		s.push(a[left]);
		return s;
	}
}
int main()
{
	cin >> n;
	for (int j = 0; j < n; j++)
		cin >> a[j];
	 queue<int> s=gbpx(0, n - 1);
	 while (s.size())
	 {
		 cout << s.front() << ' ';
		 s.pop();
	}
}

vector写法:

#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int n;
vector<int> book;
vector<int> gbpx(int left, int right)
{
	if (left < right)
	{
		int mid = left + right + 1 >> 1;
		vector<int> l = gbpx(left, mid - 1);
		vector<int> r = gbpx(mid, right);
		vector<int> s;
		int ljs=0, rjs = 0;
		int* ps = NULL;
		vector<int>* point = NULL;
		while (ljs != l.size() && rjs != r.size())
		{
			
			(l[ljs] < r[rjs]) ? (ps=&ljs,point=&l) : (ps=&rjs,point=&r);
			s.push_back(point->at(*ps));
			(*ps)++;
		}
		if (ljs == l.size())
		{
			ps = &rjs;
			point = &r;
		}
		else
		{
			ps = &ljs;
			point = &l;
		}
		while (*ps != point->size())
		{
			s.push_back(point->at(*ps));
			(*ps)++;
		}
		return s;
	}
	else
	{
		vector<int> s;
		s.push_back(book[left]);
		return s;
	}
}

int main()
{
	cin >> n;
	for (int j = 0; j < n; j++)
	{
		int g = 0;
		cin >> g;
		book.push_back(g);
	}
	vector<int> result = gbpx(0, n - 1);
	for (int j = 0; j < n; j++)
	{
		cout << result[j] << ' ';
	}
}

### 回答1: vectorqueue 是两种不同的数据结构,它们的主要区别在于其内部实现方式和用途。 Vector 是一种动态数组,它可以自动调整大小以容纳更多元素。Vector 内部使用数组来存储元素,因此对于随机访问元素的操作具有很高的效率,但是在插入和删除元素时,需要移动其他元素来腾出空间,所以效率较低。 Queue 是一种先进先出(FIFO)的数据结构,它在队尾添加元素,在队头删除元素。Queue 内部通常使用链表来存储元素,因此在插入和删除元素时效率较高,但是对于随机访问元素的操作效率较低。 总之,如果你需要支持随机访问元素并且需要频繁地插入和删除元素,那么 vector 可能更适合;如果你需要支持先进先出的操作,那么 queue 可能更适合。 ### 回答2: vectorqueue都是C++的容器,但它们在功能和使用上有很大的区别。 1. 功能:vector是一种动态数组,提供了随机访问元素的能力,可以在任意位置插入和删除元素。而queue是一种先入先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。 2. 内部存储结构:vector使用数组来存储元素,可以通过索引来直接访问元素。而queue通常使用链表或者动态数组来实现,在队尾插入元素,在队头删除元素。 3. 使用方式:vector可以方便地进行元素的插入、删除和修改,适合需要随机访问元素的场景。而queue一般用于需要按照先后顺序处理任务的场景,如任务调度、消息队列等。 4. 性能:由于vector支持随机访问,所以在访问元素时的时间复杂度是O(1);而在插入和删除元素时,由于需要保持元素的连续性,可能需要移动其他元素,时间复杂度为O(n)。而queue在插入和删除元素时,只需修改指针即可,时间复杂度为O(1)。 综上所述,vector适用于需要随机访问元素的场景,而queue适用于需要按照先后顺序处理任务的场景。选择使用哪种容器应根据具体的需求和场景来决定。 ### 回答3: vectorqueue都是C++的容器,有一些相似之处,但也有一些区别。 相同点: 1. 都是模板类,可以存储不同类型的元素。 2. 都可以通过成员函数进行元素的访问、插入和删除操作。 不同点: 1. 底层数据结构不同: - vector是基于动态数组实现的,使用连续的内存块存储元素,可以随机访问任何元素。 - queue是基于双向链表实现的,每个元素都有一个指向下一个元素的指针,只能从头部插入、尾部删除,并且只能访问头部元素。 2. 数据存储方式不同: - vector的元素在内存的存储是连续的,可以使用索引直接访问任何元素。 - queue的元素在内存的存储是分散的,只能通过队列的操作方法进行访问和修改。 3. 功能不同: - vector适用于需要频繁随机访问元素的场景,可以根据索引快速访问和修改元素。 - queue适用于先进先出(FIFO)的场景,常用于实现任务队列、消息队列等。 综上所述,vector适用于需要频繁随机访问元素的场景,而queue适用于先进先出的场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值