첫 번째 반복문 : "인덱스 0과 1에 주목"
[4, 2, 7, 1, 3] ->
[4, 4, 7, 1, 3] ->
[2, 4, 7, 1, 3]
두 번째 반복문 : "인덱스 0, 1, 2에 주목"
[2, 4, 7, 1, 3] -> (변동없음)
세 번째 반복문 : "인덱스 0, 1, 2, 3에 주목"
[2, 4, 7, 1, 3] ->
[2, 4, 7, 7, 3] ->
[2, 4, 4, 7, 3] ->
[2, 2, 4, 7, 3] ->
[1, 2, 4, 7, 3]
네 번째 반복문 : "인덱스 0, 1, 2, 3, 4에 주목"
[1, 2, 4, 7, 3] ->
[1, 2, 4, 7, 7] ->
[1, 2, 4, 4, 7] ->
[1, 2, 2, 4, 7] ->
[1, 2, 3, 4, 7]
def insert_sort(list):
length = len(list)
for index in range(1, length): # 1, 2, 3, 4
# 임시변수
# 아래 while문에서 '비교'와 '복사(시프트)'가 진행되는 동안
# 임시변수값은 변경되지 않는다.
comp = list[index]
# 임시변수와 비교하게될 배열 인덱스
# - 1씩 감소하며 비교될 예정
cur_index = index
#임시변수(comp)보다 앞 인덱스의 값이 크다면 loop문 진행
while cur_index > 0 and list[cur_index - 1] > comp:
# 값을 '복사'해서 자리를 계속 만들어 준다.
list[cur_index] = list[cur_index - 1]
# 앞 인덱스들 데이터와의 대소비교를 하기 위해 -1 진행
cur_index -= 1
# (while loop 탈출 후) 적절한 위치에 임시변수 값 입력 list[cur_index] = comp
return list
list = [4, 2, 1, 7, 3]
sorted_list = insert_sort(list)
print(sorted_list)
하지만,
여기에 새로운 관점이 도입된다.
시나리오에 따라 삽입정렬의 효율이 바뀐다는 것이다.
삽입정렬
while cur_index > 0 and list[cur_index - 1]
- One step at a time -