데이터를 특정한 기준에 따라서 순서대로 나열
| N | 선택 정렬 | 퀵 정렬 | 기본 정렬 라이브러리 |
|---|---|---|---|
| 100 | 0.0123초 | 0.00156초 | 0.00000753초 |
| 1000 | 0.354초 | 0.00343초 | 0.0000365초 |
| 10000 | 15.475초 | 0.0312초 | 0.000248초 |
매번 ‘가장 작은 것을 선택’
다른 정렬 알고리즘에 비해 비효율적
시간 복잡도 - O($N^2$)
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
min_index = i
for j in range(i+1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i]
특정한 데이터를 적절한 위치에 ‘삽입’
리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작
시간 복잡도 - O($N^2$)
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(1, len(array)):
for j in range(i, 0, -1):
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j]
else:
break
기준을 설정하고 큰 수와 작은 수를 교환한 후 리스트를 반으로 나누는 방식
피벗Pivot(교환하기 위한 ‘기준’) 사용
호어 분할 방식 기준
평균 시간 복잡도 - O($NlogN$)