버블 정렬의 비효율성을 개선하기 위해 등장한 삽입 정렬은 정렬되지 않은 값을 정렬된 값들과 비교하여, 알맞은 자리에 삽입해주는 정렬이다.
Stable 정렬이면서 In-place 정렬이며, 버블 정렬의 비교 및 교환 횟수를 줄임으로써 높은 효율을 보여준다.
1. i번째 원소와 0부터 i-1번째 원소를 비교한다.
2. 이 때, i번째 값보다 작은 값을 발견하면 그 위치에 i번째 원소를 삽입한다.
3. 위 과정을 반복한다.
O(1)
의 공간 복잡도를 갖는다.N-1
번의 루프가 실행되고, 1번의 비교와 삽입이 이루어지기 때문에 O(N)
이다.N-1
번의 루프가 실행되는 동안 N-1
번의 비교가 발생한다. 이를 수식으로 나타내면 다음과 같다.(N-1) + (N-2) + ... + 2 + 1 = N * (N-1) / 2
O(N^2)
이다.for i in range(1, n):
key = arr[i]
idx = i
while idx > 0 and arr[idx-1] > key:
arr[idx] = arr[idx-1]
idx -= 1
arr[idx] = key
--
참고 사이트
🙇🏻♂️ https://www.daleseo.com/sort-insertion/
🙇🏻♂️ https://jbhs7014.tistory.com/180