私は要素の配列を持っています。この配列は次のようになります。
- ランダムにシャッフル (約 20% の確率)
- 昇順でほぼソート* (約 40% の確率)
- ほぼ降順でソートされます (約 40% の確率)
しかし、これらのケースのどれが当てはまるかは(事前に)わかりません。配列をすでに近い順序に並べ替えたいと思います。
出力が昇順か降順かは問題ではありませんが、どちらか一方でなければなりません (したがって、バイナリ検索を実行できます)。
ソートは安定している必要はありません。
背景情報: プロセスはおおまかに次のようになります。
- 配列にデータを入力する
- いくつかの属性 A で並べ替える
- いくつかの処理を行います (変位値の計算、およびその他のマイナーなもの)
- 他の属性 B で並べ替える
- より多くの処理を行う
- 属性 C でソート
- より多くの処理を行う
A と B はしばしば相互に相関します (ただし、正または負の場合もあります)。B と C にも同じことが当てはまります。A == C の場合もあります。
* ここでの「ほぼソート」とは、ほとんどの要素が最終的な位置に近いことを意味します。しかし、それらの最終位置が正確であることはめったにありません (多くの付加的なノイズがあり、長くソートされたサブシーケンスはあまりありません)。次の並べ替え。
昇順と降順を優先しないという事実を利用して、より安価にソートできるアルゴリズムはありますか (現在使用している TimSort と比較して?)