挿入ソートとソートの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ビット戻します。

実績

配列ソートアルゴリズムが最適化された後、挿入ソートは明らかにソートよりも優れています(理由はまだ見つかりません)。

ただし、テンプレートアルゴリズムの場合、最適化された挿入順序の効率は選択と同様であり、最適化前の挿入順序よりもはるかに優れています。