정렬 대상이 될 원소를 두 부분으로 나눈다.
매번 정렬할 부분의 가장 첫번째 원소를 정렬이 된 부분에 삽입(insertion)을 한다.
삽입은 정렬된 부분의 가장 큰 원소 (= 가장 오른쪽 원소)부터 오른쪽으로 비교해나가면서 진행한다.
def insertion_sort(L):
result = list(L)
if len(result) == 1:
return result
sorted_idx = 0 # 0까지만 정렬이 됨
for i in range(len(result)-1):
sorted_idx += 1 # 정렬할 부분의 길이가 1씩 증가
for x in range(sorted_idx, 0, -1):
if result[x] < result[x-1]:
result[x], result[x-1] = result[x-1], result[x]
else: # 오름차순으로 정렬이 되어있으니 break
break
return result
가장 좋을 경우
최악의 경우
평균 시간 복잡도
포인트는 i+1번째 원소를 추가하는 행위를 n-1번 반복한다는 것에 있다.
그것들을 모두 곱해서 더하면 평균적인 시간 복잡도가 유도된다.