본문으로 바로가기

삽입정렬(InsertionSort)

category 프로그래밍, 언어/Java초, 중급 2020. 5. 11. 15:01
최악의 경우 버블정렬과 같이 n^2  의 시간복잡도를 가진다. 

최선의 경우 정렬되어 있는 경우 n의 시간복잡도를 가진다.

평균 버블정렬보다 절반정도의 빠름을 보여준다. 

특정위치에(인덱스)있는 요소를 적절한 위치에 들어갈 수 있도록 되어있다.  해당 인덱스는 버블정렬과 다르게, 선택되어진 특정 값이 자신의 위치를 찾는순간 더 이상 앞의 데이터와 비교할 필요(정확히 스위칭)가 없어지기 때문에 효과적이다.

 

예  제

Ex) 5 3 6 4

 

  1) 2번째 3 선택되어

     5 6 4 <-- 선택된 3 5보다 작으므로 5 값을 오른쪽으로 한칸 스위치

      3 5 6 4 <-- 더 이상 비교 값이 없으므로 3 앞에 위치한다.

 

  2) 3번째 6 선택되어

     3 5 6 4 <-- 선택된 6 5보다 크기때문에 변동없음.

     3 5 6 4 <-- 선택된 6 3보다 크기때문에 변동없음.

 

  3) 4번째 4 선택되어

     3 5 6 <-- 선택된 4 6보다 작으므로 6 오른쪽으로 한칸 스위치

     3 5 6 <-- 선택된 4 5보다 작으므로 5 오른쪽으로 한칸 스위치

     3 4 5 6 <-- 선택된 4 3보다 크기때문에 4 2번째에 위치시킨다.

 

  결과 : 3 4 5 6

 

 

소  스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class InsertionSort {
 
    public static void main(String[] args) {
        int[] targetArr = {3,9,6,5,2,7,4,1,8}; 
        
        int length = targetArr.length;
        
        int temp=0;
        for(int i=1; i < length; i++) {
            for(int j=i; j > 0; j--) {
                if(targetArr[j-1> targetArr[j]) {
                    temp = targetArr[j];
                    targetArr[j] = targetArr[j-1];
                    targetArr[j-1= temp;
                }
            }
        }
        
        for(int result : targetArr) {
            System.out.print(result);
        }
 
    }
}
 
 

 

결  과