정렬(Sorting)
데이터를 특정한 기준에 따라 순서대로 나열
선택정렬
처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꿈
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] #스와프
print(array)
선택정렬의 시간 복잡도
N번 만큼 가장 작은 수를 찾아서 맨 앞으로 보내기 -> N + (N-1) + (N-2) + ... + 1 -> 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
print(array)
선택정렬의 시간 복잡도
반복문 중첩 사용 -> O(N^2)
삽입 정렬은 현재 리스트의 데이터가 거의 정렬이 되어 있는 상태라면 매우 빠르게 동작
최선의 경우 O(N)의 시간 복잡도를 가짐
'Algorithm' 카테고리의 다른 글
[알고리즘] 정렬 알고리즘(Sorting)(3) - 계수 정렬 (0) | 2022.05.06 |
---|---|
정렬 알고리즘(Sorting)(2) - 퀵 정렬 (0) | 2022.05.06 |
파이썬 재귀 깊이 제한 변경(RecursionError) (0) | 2022.04.14 |
그리디 알고리즘(Greedy)과 구현(Implementation) (2) (0) | 2022.04.01 |
그리디 알고리즘(Greedy)과 구현(Implementation) (1) (0) | 2022.03.27 |