3

公開している API の入力の 1 つとして std::vector があります。この API のユーザーが巨大なベクトルを送信できることは知っていますが、そのベクトルはソートされたベクトルの連結によって形成されました。これは、取得したベクトルが多数の並べ替えられたベクトルから形成されていることを意味します。

このベクトルをソートする必要があります。どのソートアルゴリズムが最適か知りたいです。より多くのメモリを消費したくないので、merge や quick のようなインプレース ソート アルゴリズムを好みます (ベクトルは既に巨大なものです)。

また、API インターフェイスを変更して、N 個の並べ替えられたベクトルを受け入れてから、自分で N 方向のマージを行う方がよいでしょう。節約が本当に巨大でない限り、私はこれを使いたくありません。また、N-way マージを実行している間、可能であればインプレースで実行したいと考えています。

したがって、理想的には、大きなベクトルで準備ができているソートアルゴリズムを使用するアプローチを好みます(その方が簡単だと思います)。

4

3 に答える 3

2

std::inplace_mergeを見てください。マージソートのアイデアを使用して、各ペアをマージし、次のペアをマージし、次のペアをマージすることができます.1つだけが残るまで.

于 2013-04-10T12:08:26.780 に答える
0

Timsortはまさに必要なもののようです。これは、データ内の事前に並べ替えられた実行を探し、それらをマージする適応並べ替えです。最悪の場合の O(nlog n) パフォーマンスがあり、実行 (事前に並べ替えられたサブ配列) が長い場合よりもはるかに優れていると思います。

于 2013-04-10T12:16:48.197 に答える