C++ 合并排序k列表c++;
我有一个随机生成的排序列表,我必须在堆的帮助下将大列表合并到一个最终列表中C++ 合并排序k列表c++;,c++,algorithm,list,sorting,mergesort,C++,Algorithm,List,Sorting,Mergesort,我有一个随机生成的排序列表,我必须在堆的帮助下将大列表合并到一个最终列表中 std::list<int> randomList(int size) { std::list<int> list; for (int i = 0; i < size; i++) list.push_back(rand()); list.sort(); return list; } std::list<list<int>&g
std::list<int> randomList(int size)
{
std::list<int> list;
for (int i = 0; i < size; i++)
list.push_back(rand());
list.sort();
return list;
}
std::list<list<int>> generateListOfLists(int size, int elements)
{
std::list<list<int>> bigList;
std::list<int> aux;
for (int i = 0; i < size; i++)
{
aux = randomList(elements);
bigList.push_back(aux);
}
return bigList;
}
std::list randomList(整数大小)
{
std::列表;
对于(int i=0;i
我之所以使用列表是因为我必须这样做。有人能帮我想一想如何在这里实现合并排序吗
谢谢 为所有列表创建一个迭代器数组。从所有列表中创建一个最小元素堆 在进行合并时,堆应该始终包含每个列表中的一个元素。在主循环中,从堆中获取最小元素,确定它来自哪个列表,增加该列表的迭代器,并用相应列表中的下一个元素替换堆中的元素 要将列表索引附加到元素,请在堆中存储
struct
s:
struct data
{
int element;
int list;
};
std::vector<data> heap;
...
std::pop_heap(heap.begin(), heap.end());
... // Your data is in the last position of the array: heap.back()
std::push_heap(heap.begin(), heap.end());
struct数据
{
int元素;
int列表;
};
std::向量堆;
...
std::pop_heap(heap.begin(),heap.end());
... // 数据位于数组的最后一个位置:heap.back()
std::push_heap(heap.begin(),heap.end());
您知道如何使用该软件吗?它们应该完成任务的第二部分,而不必从头开始编写堆函数。