반응형
삽입 정렬(Insertion Sort)은 배열의 구간을 정한다음 원소를 비교하며 정렬을 하는 방식입니다.
1. 0 번째 인덱스의 원소와 1 번째 인덱스의 원소를 비교 합니다. (ex. 범위는 0-1 인덱스)
2. 1 번째 원소가 0 번째 원소보다 작으면 첫 번째 원소의 인덱스는 1 증가하고 두 번째 원소의 인덱스는 1 감소합니다.
3. 이런식으로 범위가 1씩 증가하며 원소를 비교한 뒤 큰 숫자의 인덱스를 1씩 늘려주고 작은 숫자의 인덱스를 숫자 만큼 감소 해주세요.
아래는 위의 순서에 맞게 실행한 예제입니다.
- 배열에 저장되는 값은 [3, 6, 0, 9, 1] 입니다.
Sequence | Array | Arrange |
1 | [3, 6, 0, 9, 1] | 변화 없음 |
2 | [3, 6, 0, 9, 1] | 0(a[2] -> a[0]) 3(a[0] -> a[1]) 6(a[1] -> a[2]) |
3 | [0, 3, 6, 9, 1] | 1(a[4] -> a[1]) 3(a[1] -> a[2]) 6(a[2] -> a[3]) 8(a[3] -> a[4]) |
아래는 삽입 정렬을 구현한 자바 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <code> package algorithm; import java.util.Arrays; public class InsertionSort { public static void main(String[] args) { int [] a = { 3 , 6 , 0 , 9 , 1 }; int [] sorted_a = insertionSort(a); System.out.println(Arrays.toString(sorted_a)); } public static int [] insertionSort( int [] a) { int i, j; for (i = 0 ; i < a.length; i++) { int temp = a[i]; int range = i- 1 ; while (range >= 0 && a[range] > temp) { a[range+ 1 ] = a[range]; range--; } a[range+ 1 ] = temp; } return a; } } </code> |
반응형