알고리즘
삽입 정렬
ORIONPOINT
2020. 9. 19. 19:12
1. 삽입 정렬(insertion sort)란?
- 삽입 정렬을 두 번째 인덱스부터 시작
- 해당 인덱스(key 값) 앞에 있는 데이터(B)부터 비교해서 key 값이 더 작으면, B값을 뒤 인덱스로 복사
- 이를 key 값이 더 큰 데이터를 만날 때까지 반복, 그리고 큰 데이터를 만난 위치 바로 뒤에 key값을 이동
2. 삽입정렬 코드 연습
데이터가 두 개일 때
data_list = [9, 4]
if data_list[1] < data_list[0]:
data_list[0], data_list[1] = data_list[1], data_list[0]
데이터가 세 개 이상일 때
data_list = [7, 9, 8, 3]
for index in range(len(data_list)-1):
for index2 in range(index+1, 0, -1):
if data_list[index2] < data_list[index2-1]:
data_list[index2], data_list[index2-1] = data_list[index2-1], data_list[index2]
print(data_list)
3. 알고리즘 구현
- for stand in range(len(data_list))로 반복
- key = data_list[stand]
- for num in range(stand, 0, -1) 반복
- 내부 반복문 안에서 data_list[stand] < data_list[num-1]이면
- data_list[num-1]과 data_list[stand] 를 swap
- 내부 반복문 안에서 data_list[stand] < data_list[num-1]이면
def insertionSort(data):
for index in range(len(data)-1):
for index2 in range(index + 1, 0, -1):
if data[index2] < data[index2-1]:
data[index2], data[index2-1] = data[index2-1], data[index2]
else:
break
return data
4. 알고리즘 분석
- 반복문이 두 개 O(n^2)
- 최악의 경우 n*(n-1)/2
- 완전 정렬이 되어 있는 상태면 최선은 O(n)