본문 바로가기
lecture.js/algorithm.log

#014 삽입 정렬

by malda 2017. 7. 18.
# 문제)
아래와 같이 정렬되지 않은 배열이 있을때 삽입 정렬을 사용하여 오름차순 정렬하여라.

<초기>
5
2
4
3
1


선택정렬은 방향이 버블과 선택과 다르다.
버블과 선택은 왼쪽에서 오른쪽으로 이동했다면

삽입 정렬은 두번째 부터 시작하여 왼쪽으로 이동하며 삽입될 위치를 찾는다.
만약 왼쪽 값이 더 큰 경우, 왼쪽 값을 현재 인덱스 값에 저장한다. (배열 shift처리)
더이상 왼쪽으로 이동할 수 없거나, 왼쪽값이 더 작다면 삽입할 위치를 찾은 것이므로 해당 위치에 값을 저장한다.


<1회전> int tempValue = 2;
5
2
4
3
1
5 5
4
3
1

2
5
4
3
1


<2회전> int tempValue = 4;
2
5
4
3
1
2
5
5
3
1
2
5
5
3
1

2
4
5
3
1


<3회전> int tempValue = 3;
2
4 5
3
1
2
4
5
5
1
2
4
4
5
1
2
4
4
5
1

2
3
4
5
1


<4회전> int tempValue = 1;
2
3
4
5
1
2
3
4
5
5
2
3
4
4
5
2
3
3
4
5
2
2
3
4
5

1 2
3
4
5


package dataStructure.sort.insertion;

public class InsertionSort {

    private int[] array;
    private int size;
    private int maxSize;
   
    public InsertionSort(int maxSize) {
        // TODO Auto-generated constructor stub
        this.maxSize = maxSize;
        this.array = new int[this.maxSize];
        this.size = 0;
    }
   
   
    public void add(int value) {
        if(size >= maxSize) {
            System.out.println("error. max size..");
            return;
        }
        array[size++] = value;
    }
   
    public void add(int...values) {
        if((this.size + values.length) >= this.maxSize) {
            System.out.println("max size.. so, can't add..");
            return;
        }
       
        for(int i=0; i<values.length; i++) {
            this.array[this.size++] = values[i];
        }
    }
   
    public void sort() {
        int j = 0;
        for(int i=1; i < size; i++) {
            int insertionValue = array[i];
            for(j=i-1; j>=0; j--) {
                if(insertionValue < array[j]) {
                    array[j+1] = array[j];
                }else {
                    break;
                }
            }
            //j가 이미 -1이 된 상태이므로 (증감식이 실행된 후 나옴)
            array[j+1] = insertionValue;
        }
    }
   
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        StringBuilder result = new StringBuilder();
        result.append("[");
        int i = 0;
        while( i < size ) {
            result.append(array[i]);
            if( i != size-1) {
                result.append(",");
            }
            i++;
        }
        result.append("]");
        return result.toString();
    }
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InsertionSort insertion = new InsertionSort(10);
        insertion.add(5,2,4,3,1);
        System.out.println(insertion);
        insertion.sort();
        System.out.println(insertion);
    }

}



'lecture.js > algorithm.log' 카테고리의 다른 글

#017 퀵 정렬  (0) 2017.07.18
#015 힙 정렬  (0) 2017.07.18
#013 선택 정렬  (0) 2017.07.18
#012 버블 정렬  (0) 2017.07.18
#011 한글로 변환  (0) 2017.07.18