본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



삽입 정렬은 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.
 

정렬 과정 (N개의 정렬을 할 숫자가 있다고 가정)

1.  한 개의 값을 포함하는 목록으로 시작한다. 

2.  두 개의 값을 비교하고, 적합한 위치에 삽입한다. 

3. 세 개의 값을 처음 두 개의 값과 비교하여 위치에 삽입한다.


두 가지의 버전으로 작성하였다. 하나는 재귀를 이용한. 하나는 단순 for문이다.


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class InsertSort {
    private static int[] array;
 
    public static void init(int length) {
        array = new int[length];
 
        for (int i = 0; i < length; i++) {
            array[i] = (int) (Math.random() * 45+ 1;
        }
    }
 
    private static void swap(int[] array, int source, int target) {
        int tmp = array[source];
        array[source] = array[target];
        array[target] = tmp;
    }
 
    public static void printArray(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String[] args) {
        init(10);
        printArray(array);
        insertSort(array);
        printArray(array);
    }
    
    public static void insertSort(int[] array) {
        insertSort(array, 1);
    }
    
    public static void insertSort(int[] array, int start) {
        if(start < array.length) {
            int standard = array[start];
            int compareIndex = start-1;
            
            while(compareIndex >= 0 && array[compareIndex] > standard) {
                array[compareIndex + 1= array[compareIndex];
                compareIndex--;
            }
            
            array[compareIndex + 1= standard;
            insertSort(array, start+1);
        }
    }
}



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
public class InsertSortExample {
    public static void main(String[] args) {
        int[] arr = { 10264375 };
        
        for(int i : arr) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        for(int i=1; i < arr.length; i++) {
            int standard = arr[i];
            int compareIndex = i-1;
            
            while(compareIndex >= 0 && standard < arr[compareIndex]) {
                arr[compareIndex+1= arr[compareIndex];
                compareIndex--;
            }
            
            arr[compareIndex + 1= standard;
        }
        
        for(int i : arr) {
            System.out.print(i + " ");
        }
    }
}




'알고리즘 및 자료구조 > 정렬' 카테고리의 다른 글

선택 정렬(Selection Sort)  (0) 2016.03.02
거품 정렬(Bubble Sort)  (0) 2016.03.02