一段合并多个有序数组并且升序输出数组元素的C++代码

本文介绍了一种使用C++合并多个有序数组的方法,通过建立最小堆,逐个弹出堆顶元素实现升序且不重复的输出。详细步骤包括初始化堆,比较堆顶元素与上次弹出值,输出元素并更新堆。提供的代码实现了这一过程。
摘要由CSDN通过智能技术生成

今天心情由特别烂转变为特别好!!!所以决定写一篇,是实验室里做东西用到的~~

标题起的不好哈~以下代码的意思就是:合并多个有序数组,由小到大不重复地输出里面的元素值。实现的方法是将这些数组合并建最小堆,每次弹出堆顶。

具体算法:

1、将每个数组的第一个元素保存到堆中,并记录其来自哪个数组。整理堆。

2、如果堆不为空且数组没有遍历完,弹出堆顶。否则转5。

3、如果弹出的值等于上一次弹出的值last_data,将该值所在数组的下一个元素读入堆,整理堆并转2。否则转4。

4、将该值输出,将该值所在数组的下一个元素读入堆,整理堆并转2。

5、结束。

C++代码如下:

定义heap_item类:

class heap_item
{
public:
	int data;
	int array_id;
	heap_item(int d, int i)
	{
		data = d;
		array_id = i;
	}
	heap_item(const heap_item &i)
	{
		data = i.data;
		array_id = i.array_id;
	}
};
定义multi_heap类:

class multi_heap
{
private:
        vector<heap_item> h;
        vector<vector<int> *> header;
        vector&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值