部分的な並べ替えは、std::partial_sortを使用して実行できます。
部分的なソート手段
5 7 4 2 8 6 1 9 0 3
3つの要素を部分的に並べ替えた後
0 1 2 7 8 6 5 9 4 3
http://en.cppreference.com/w/cpp/algorithm/partial_sort。
ただし、一部の要素がすでに並べ替えられている場合は最適ではありません。
そうして、部分的にソートされた配列を利用できる他のそのような関数はありますか?
部分的な並べ替えは、std::partial_sortを使用して実行できます。
部分的なソート手段
5 7 4 2 8 6 1 9 0 3
3つの要素を部分的に並べ替えた後
0 1 2 7 8 6 5 9 4 3
http://en.cppreference.com/w/cpp/algorithm/partial_sort。
ただし、一部の要素がすでに並べ替えられている場合は最適ではありません。
そうして、部分的にソートされた配列を利用できる他のそのような関数はありますか?
ストリーミング メディアンアルゴリズムの適応を使用して、k
項セットの最小項を追跡できます。std::priority_queue
最小および最大ヒープに使用できます。
アルゴリズムは次のように機能します。
k
最小の用語を保持するために使用されますk
最大ヒープのサイズがそこに追加するよりも小さい場合、そうでない場合k
用語がある場合は、最上位の用語を取り出して最小ヒープにプッシュします用語をソートする必要がある場合は、それらを最大ヒープから降順でポップし、逆の順序で配列に配置して、ソートされた配列を残すことができます。コンテナーを最大ヒープのコンストラクターに渡した場合は、コンテナーをコピーして並べ替えることができます。
デフォルトではstd::priority_queue
最大ヒープです。最小ヒープにするには、テンプレート パラメーターの一部を変更します。
typedef std::priority_queue<int> MaxHeap;
typedef std::priority_queue
<
int,
std::priority_queue<int>::container_type,
std::greater<int>
> MinHeap;