私は現在、データの配列の下半分にある値を取得しようとしています。この配列は、最初はソートされていません。
これから:
{4,6,9,3,8,5}
これに:
{3,4,5,6,9,8} or {3,4,5}
簡単な解決策は、(クイックソートを使用して)配列を並べ替えてから、並べ替えられた配列の前半に格納されている値のみを使用することです。ただし、クイックソートと最も効率的なソートアルゴリズムでは、最初の50%しか必要ないのに配列全体がソートされるため、これはリソースの無駄のように思われます。このプロジェクトではパフォーマンスが問題になることに注意してください。
完全なソートがO(n log n)であり、最下位の要素が見つかった後に停止するソートがO(n)であることを知っているので、n / 2*nの複雑さを持つ単純なアルゴリズムを簡単に構築できます。最低50%。しかし、それは完全なクイックソートよりも本当に優れていますか?
明確にするために、配列内の値の下半分のみが必要な場合に使用するのに最適な並べ替えは何でしょうか。50%が小さければ(1%のように)、最下位の要素を順次検索するのがもちろん最速の解決策ですが、クイックソートよりも遅くなるのは何%ですか?
私はC++でコーディングし、ベクトルを使用していますが、この質問はかなり一般的なはずです。