挿入ソートとソートのJavaジェネリック実装
Java Generic Implementation Insert Sorting
ソートを選択
/ / Select the sort template method //http://www.cnblogs.com/xiaomiganfan/p/5390252.html Generic related public static void selectionSort(T[] arr, int n){ for(int i=0 i挿入ソート
public static void InsertionSort(T arr[], int n){ for(int i=1 i0 && arr[j].compareTo(arr[j-1]) <0 j--){ T temp = arr[j] arr[j] = arr[j-1] arr[j-1] = temp } } }
運転結果
public static void main(String[] args) { int n = 10000 int right = 100000 Integer arr1[] = getRandomNum(n, right) Integer arr2[] = new Integer[n] for(int i=0 i Insert Sort time is: 250 Select Sort time is: 181
トラバース中に挿入順序が入れ替わるため、選択順序よりも時間がかかります。
最適化された挿入順序
/ / Optimized insert sort, change the exchange within the loop into an assignment public static void OptInsertionSort(T arr[], int n){ long optInsertStartTime = System.currentTimeMillis() // System.out.println('OptInsert') for(int i=1 i0 j--){ if(arr[j-1].compareTo(temp)>0){ arr[j] = arr[j-1] }else{ break } } arr[j] = temp } long optInsertFinalTime = System.currentTimeMillis() System.out.println('OptInsert Sort time is: '+ (optInsertFinalTime-optInsertStartTime)) }
内部ループ内の交換は割り当てに変更されます。
13 23 10 4 55
最初のコピー23
23より前の要素を23と比較し、23より大きい場合は、前の要素を1ビット戻します。
実績
配列ソートアルゴリズムが最適化された後、挿入ソートは明らかにソートよりも優れています(理由はまだ見つかりません)。
ただし、テンプレートアルゴリズムの場合、最適化された挿入順序の効率は選択と同様であり、最適化前の挿入順序よりもはるかに優れています。