2011-08-09 8 views
2

何度も小さなリスト、配列を大量に並べ替える必要があります。私は大きな配列をソートする必要があることはまれです。これをソートするための最速のソートアルゴリズムである:小規模コレクションの中で最も速い並べ替え

  • アレイ
  • (配列)は、これらのタイプの
  • サイズの

8-15要素示します。

  • 整数
  • 文字列を10〜40文字の数字

いくつかのアルゴリズムでは、操作の比較とスワップ操作の回数が増えているため、要素型をリストしています。

私はマージソート、クイックソート、挿入ソート、シェルソート(2^k - 1増分)を検討しています。

答えて

13

Arrays.sort(..)/Collections.sort(..)があなたのために決定します。

たとえば、openjdk-7 implementation of Arrays.sort(..)INSERTION_SORT_THRESHOLD = 47です。47個未満の要素の挿入ソートが使用されています。

+2

正確には、そして小規模なコレクションでは、現代のマシンでは効率の違いがほとんど目に見えません。 –

+0

私は「それは問題ではない」という答えを期待していました。サーバーが毎秒数十件の要求を処理していて、数十種類の要求を処理している場合は問題ありません。マージソートでは多くの割り当てが行われるため、ガベージコレクタの処理が難しくなります。この挿入ソートのしきい値はSun/Oracle Java 6実装でですか?そうでなければ私を助けることはほとんどありません。 –

+0

Java 6コードで、しきい値が正確であることを確認できます。しかしアルゴリズムはずいぶん前に指定されているので、私は大きな違いは期待していません。 – Bozho

1

あなたは、これは、その後の種類に建てられたボトルネックであることを証明できない限り、罰金です:

Collections.sort(myIntList); 

Arrays.sort(myArray); 
1

は実際には、普遍的な答えはありません。とりわけ、Javaソートアルゴリズムのパフォーマンスは、比較操作の相対コスト、および(一部のアルゴリズムの場合)入力の順序に依存します。リストの場合、リスト実装のタイプにも依存します。

しかし、@ Bozhoのアドバイスは、@Sean Patrick Floydのコメントと同じように、健全です。


フォロー

あなたはパフォーマンスの違いは、あなたのユースケースのために重要になるだろうと信じている場合は、異なるアルゴリズムのいくつかの実装のホールドを取得し、使用してそれらをテストする必要がありますアプリケーションが処理する必要のある実際のデータ(ソートのパフォーマンスは実際のデータに依存するため、まだデータがない場合は、アプリケーションのチューニングを開始するのが早すぎます)

要するに、自分でベンチマークを行う必要があります。

関連する問題