알고리즘

삽입정렬

ho-bolt 2021. 10. 30. 00:57

삽입 정렬은 숫자를 적절한 위치에 삽입하는 방법이다. 

즉 필요할 때에만 위치를 바꾸면 된다. 

 

8번라인에서 j=i인 이유는 비교할 숫자를 선택하는 것이다

그리고 13번라인에서 j--를 해주는 이미 정렬되어 있는 왼쪽에 배열과 비교하기 때문이다. 

위의 array처럼 되어 있다면 10 >4인 경우 임으로 4와 10의 위치를 바꾼다. 그리고 for문으로 가서 

2는 10앞에 들어갈 지 4 앞에 들어갈지 비교한다. 이렇게 현재 자신의 왼쪽에 이미 정렬되어 있는 배열과 비교한다. 

만약 자신이 왼쪽 배열보다 크다면 반복문에서 벗어나기 때문에 멈춰서 필요할 때만 삽입되는 것을 알 수 있다. 

즉 기본적으로 정렬이 되어있다고 가정하면서 돌린다. 

 

이것도 마찬가지로 시간복잡도는 O(N^2) 이다 

 

※ 만약 거의 정렬되어 있다면..? 

 

2 3 4 5 6 7 8 9 10 1

이렇게 되어 있다면 3,4,5,6,7,8,9,10은 비교를 수행하지 않고 오직 1만 왼쪽에 배열된 위치를 탐색하기 때문에

상당히 빠르게 계산을 수행할 수 있다.

728x90