私はソート済みリストを1つにまとめなければならない8個のソート済みリストがあります。私はこれを行うための最善の方法を知らない。私は次のことを考えていました:C++で8個のソート済みリストをマージするアルゴリズムを使用する必要があります
void merge_lists_inplace(list<int>& l1, const list<int>& l2)
{
list<int>::iterator end_it = l1.end();
--end_it;
copy(l2.begin(), l2.end(), back_inserter(l1));
++end_it;
inplace_merge(l1.begin(), end_it, l1.end());
}
list<int> merge_8_lists(list<int>[8] lists)
{
merge_lists_inplace(lists[0], lists[1]);
merge_lists_inplace(lists[2], lists[3]);
merge_lists_inplace(lists[4], lists[5]);
merge_lists_inplace(lists[6], lists[7]);
merge_lists_inplace(lists[0], lists[2]);
merge_lists_inplace(lists[4], lists[6]);
merge_lists_inplace(lists[0], lists[4]);
return lists[0];
}
しかし、最後にソートすることを心配する方が良いでしょうか?
list<int> merge_8_lists(list<int>[8] lists)
{
for (int i = 1; i < 8; ++i)
copy(lists[i].begin(), lists[i].end(), back_inserter(lists[0]));
lists[0].sort();
return lists[0];
}
サイドノート:リストが変更されても構いません。
複雑性分析と擬似コードのために提案します。 =] –
うわー、あなたは毎日何か新しいことを学びます。 – rlbond
なぜstd :: setで、std :: priority_queueではないのですか? – Drakosha