선택정렬과 유사하지만, 좀 더 효율적인 정렬 알고리즘이다.
주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 $O(n)$이다.
import random
def insert_sort(A):
result=[]
while(A):
num=A.pop(0) #가장 앞을 뽑아서
result.append(num) #result의 가장 뒤에 넣기
for i in range(len(result)-1,0,-1): #정렬된 곳 가장 뒤부터 가장 앞까지
if(result[i]<result[i-1]): #num이 바로 앞의 수보다 클 때까지 교환해가면서 반복
result[i],result[i-1]=result[i-1],result[i]
else:break
return result
if __name__=="__main__":
num_list=list(range(1,21))
random.shuffle(num_list)
print("정렬 전 :",num_list)
print("정렬 후 :",insert_sort(num_list))
정렬 전 : [12, 6, 17, 9, 10, 20, 14, 18, 2, 3, 11, 15, 19, 4, 5, 16, 8, 13, 7, 1]
정렬 후 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]