今天心情由特别烂转变为特别好!!!所以决定写一篇,是实验室里做东西用到的~~
标题起的不好哈~以下代码的意思就是:合并多个有序数组,由小到大不重复地输出里面的元素值。实现的方法是将这些数组合并建最小堆,每次弹出堆顶。
具体算法:
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