정렬 (Sorting)
-
버블 정렬 (Bubble sort)
- 연달아 있는 아이템 2개의 순서가 잘못되어 있으면 맞바꿈
- 시간 복잡도 : O(n2)
def bubblesort(A): for i in range(1, len(A)): for j in range(0, len(A)-1): if A[j] > A[j+1]: A[j], A[j+1] = A[j+1], A[j]
-
병합 정렬 (Merge sort)
- 분할 정복(divide and conquer)의 진수를 보여주는 알고리즘
- 각각 더 이상 쪼갤 수 없을 때까지 분할한 후 분할이 끝나면 정렬하면서 병합
- 시간 복잡도 : O(nlog n)
-
퀵 정렬 (Quick sort)
- 피벗(pivot)을 기준으로 좌우를 나눔
- 피벗보다 작으면 왼쪽, 크면 오른쪽
- 로무토 파티션 : 항상 맨 오른쪽의 피벗을 택하는 방식
- 시간 복잡도 : 평균적으로 O(nlog n)이나 최악의 경우 O(n2)
def quicksort(A, low, high): def partition(low, high): pivot = A[high] left = low for right in range(low, high): if A[right] < pivot: A[left], A[right] = A[right], A[left] left += 1 A[left], A[high] = A[high], A[left] return left if low < high: pivot = partition(low, high) quicksort(A, low, pivot-1) quicksort(A, pivot+1, high)
참고 : 「파이썬 알고리즘 인터뷰」