정렬을 할 때 가져다 쓸 수 있는 도구들 집대성
버블 정렬(Bubble Sort)은 인접한 두 원소를 비교하여 정렬하는 알고리즘 중 가장 간단한 형태입니다. 이름에서 유추할 수 있듯이, 정렬 과정에서 원소들이 "거품처럼" 이동하면서 정렬이 완료됩니다.
버블 정렬은 다음과 같은 알고리즘으로 동작합니다.
다음은 Python 코드로 구현된 버블 정렬의 예시입니다.
def bubble_sort(lst):
n = len(lst)
for i in range(n):
for j in range(n-i-1):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
위 코드에서 lst
는 정렬할 리스트를 나타냅니다. n
변수에는 리스트의 길이를 저장하고, 바깥쪽 for 루프는 리스트의 모든 원소를 순회합니다. 안쪽 for 루프는 인접한 두 원소를 비교하고, 원소의 위치를 교환합니다. 이 과정을 모든 인접한 원소 쌍에 대해 반복하며, 리스트를 정렬합니다.
버블 정렬의 시간복잡도는 O(N^2)이다.
팀 소트는 삽입 정렬과 병합 정렬을 가져다 쓰는 정렬 방법
파이썬에서 정렬 메서드를 사용할 때는 팀 소트를 사용한다.
팀 소트는 병합 정렬과 삽입 정렬의 하이브리드다.
작은 크기의 리스트에서는 삽입 정렬, 중간 크기 이상의 리스트에서는 병합 정렬을 사용.
1번 원소부터 마지막 원소까지 아래의 과정을 반복한다.
현재 원소 앞쪽에 있는 리스트에 대하여 현재 원소가 들어갈 위치를 찾아 삽입한다.
최악의 경우 시간복잡도는 O(N^2)
Divide: N개의 원소를 이등분 해나가므로 O(logN)
Conquer: N개의 원소를 하나씩 비교해가며 sorted list에 추가하므로 O(N)
따라서, 팀소트는 시간복잡도가 O(NlogN)
https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html
https://gmlwjd9405.github.io/2018/05/06/algorithm-insertion-sort.html
https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html