挿入
4406 ワード
整列挿入
2番目の要素から、前(左)の要素と比較し、挿入する位置を指定してから、要素を後ろに移動し、指定した位置に整列資料を挿入します(自分の位置が見つかった場合、後ろの要素は検索されません).
時間の複雑さ
最悪の場合(逆ソート)O(n^2)
最適な場合(1からnの順に配列)O(n)
くうかんふくざつさ
O(n)
長所
単純なアルゴリズム
並べ替えられている場合は、非常に効率的です.
ソートする配列でスワップし、他のメモリ領域を必要としません=>その場でソート(その場でソート)
安定したソート
Sortの選択よりも効率的
短所
最悪の時間複雑度はO(n^2)で効率が低下
バブルや選択ソートと同様に、アレイの長さが長いほど効率が低下します.
public class Insertion_Sort {
public static void insertion_sort(int[] a) {
insertion_sort(a, a.length);
}
private static void insertion_sort(int[] a, int size) {
for(int i = 1; i < size; i++) {
// 타겟 넘버
int target = a[i];
int j = i - 1;
// 타겟이 이전 원소보다 크기 전 까지 반복
while(j >= 0 && target < a[j]) {
a[j + 1] = a[j]; // 이전 원소를 한 칸씩 뒤로 미룬다.
j--;
}
/*
* 위 반복문에서 탈출 하는 경우 앞의 원소가 타겟보다 작다는 의미이므로
* 타겟 원소는 j번째 원소 뒤에 와야한다.
* 그러므로 타겟은 j + 1 에 위치하게 된다.
*/
a[j + 1] = target;
}
}
}
Reference
この問題について(挿入), 我々は、より多くの情報をここで見つけました https://velog.io/@away0419/삽입정렬Insertion-Sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol