본문 바로가기

Algorithm

단순 삽입법 (삽입 정렬)

단순 삽입법 이란 ?

- 데이터 정렬알고리즘 중 하나로서 요소를 차례대로 올바른 위치에 삽입해나감으로서 오름차순,내림차순 으로 

정렬하는 알고리즘이다.

 

+ 구현하기 쉽고 요소들이 이미 정렬된 상태라면 효율적일 수 있다.

- 요소 수가 많다면 많은 이동을 필요로 하기에 적합하지 않다.

 

 

단순 삽입법 구조 

1. 테이블에 첫번째 칸을 기준값으로 정한뒤 정렬된칸 과 정렬안된 칸을 나눈다.

2. 정열된 칸의 뒤에 위치한 수와 대소 관계를 비교한뒤 정열된 칸에 삽입한다.

3. 정열된 칸에 존재했던 기존에 값과 새로 삽입된 값을 비교후 정렬한다.

4. 테이블 크기 만큼 반복   

 

코드

 int[] array = {7,6,5,4,3,2,1};
        int i = 1;
        while( i < 7 ){
           int x = array[i];
           int k = i; 
            while( k > 0 && array[k-1] > x){
                array[k] = array[k-1];
                k--;
            }
            array[k] = x;
            i++;
        }
        
        for(int a=0; a < 7; a++){
            System.out.print(array[a]);

 

구현하기 쉬운 알고리즘이라는데 정말 진이 다빠지는 알고리즘이였다..

자바 기초실력이 부족해서 애를 먹은 부분도 있지만, 무엇보다 알고리즘을 이해하려는 태도가 아닌 구현해보려는 욕심을 가지고 접근하다보니 단계별 기능을 해석하는데 애를 먹었고, 코드 구현후 해석하려니 반복 처리과정에 변수들의 값예측을 하며 멘탈이 많이 부서졌던것 같다.. 그러다보니 마음을 굳게 먹고 다시 앉아봐도 겁부터 나고 집중이 안된던것같다.. 이번 알고리즘은 배우고나서 기분좋은 뿌듯함, 쾌감 없이 오로지 자괴감만 남은 알고리즘 공부였던것 같다..

하지만 이번을 계기로 알고리즘에 대한 접근 방식을 정하고 접근 태도가 얼마나 중요한지를 깨달았다.

 

1. 단계별로 이해를 해나가며 기능에 대한 전반적인 이해가 끝난뒤 코드로 구현한다.

2. 컴퓨터가 아닌 종이와 펜을 활용해서 이해력을 높인다.

3. 3 ~ 4  시간 정도 경과뒤에도 문제 이해,해결을 하지 못 했더라면 중지한뒤 답안과 풀이설명을 찾아본다.

4. 너무 완벽하게 이해하려고 안해도된다. 이 알고리즘이 무슨 기능하고 무슨 처리구조를 갖고있는지만 알아도 좋다.

 

다음은 앞서 포스팅한 알고리즘보다 난이도 높은 퀵정렬에 대해 학습을 할 계획인데 이번 알고리즘에서 멘탈이 심하게 깨져서 인지 벌써 부터 막막함과 두려움이 찾아오지만 개발자로서 성장을 원한다면 넘어야할 산이기에 미친놈 마냥 계속 달려들어야 겠다.

'Algorithm' 카테고리의 다른 글

에라토스테네스의 체 (소수를 찾는 방법)  (0) 2020.04.04
퀵정렬  (0) 2020.03.24
단순 교환법 (버블정렬)  (0) 2020.03.19
단순 선택법 (선택 정렬)  (0) 2020.03.18