(1) 基本的な考え方
すべてのレコードが挿入され、新しい順序付きシーケンスが取得されるまで、キー値のサイズに従って、ソート対象のレコードを既にソート済みの順序付きシーケンスに 1 つずつ挿入します。(ポーカーのカードソートに似ています)
i(i>=1)要素を挿入する際には、前のarray[0]、array[1]、...、array[i-1]がソートされていますので、このときarray[i]のソートコードを使用します。 ]とarray[i-1]、array[i-2]、…のソートコード順を比較し、挿入位置が見つかったらarray[i]を挿入し、元の要素の順序を戻す位置が後ろに移動します。
(2) コードの実装
public static void insertSort(int[] array) {
for (int i = 1; i < array.length; i++) {
int tmp = array[i];
int j = i-1;
for (; j >= 0; j--) {
if (array[j] > tmp) {
array[j + 1] = array[j];
} else {
break;
}
}
array[j + 1] = tmp;
}
}
以下では、新しいクラスで挿入ソートを呼び出してテストします。
(3) 機能概要
1. 要素の順序が多いほど、効率が高くなります。
2. 時間計算量は O(N^2)、空間計算量は O(1) です。
3. 安定したソートです
以上が直接挿入ソートに関する説明ですが、ご不明な点がございましたら、お気軽にコメント欄でご質問ください。