CS/알고리즘
합병 정렬(Merge Sort) 알고리즘 파이썬 예제와 설명
컨설턴트X
2023. 5. 10. 13:10
728x90
반응형
합병 정렬(Merge Sort)은 분할 정복(Divide and Conquer) 알고리즘의 하나입니다. 분할 정복 알고리즘은 큰 문제를 작은 문제로 분할하고, 각각의 작은 문제를 해결한 후에 그 결과를 이용하여 큰 문제를 해결하는 방식입니다.
합병 정렬의 구체적인 과정은 다음과 같습니다.
1. 배열을 두 개의 부분 배열로 분할합니다. 이때 분할되는 부분 배열의 크기는 대략 절반으로 나누어집니다.
2. 각각의 부분 배열을 재귀적으로 합병 정렬을 수행합니다.
3. 정렬된 두 개의 부분 배열을 합병합니다. 이때, 두 부분 배열의 첫 번째 원소부터 비교하여 작은 순서대로 새로운 배열에 저장합니다.
4. 분할된 부분 배열의 크기가 1이 될 때까지 위의 과정을 반복합니다.
아래는 합병 정렬의 구현 예시입니다. 배열을 합병 정렬하는 함수 `merge_sort()`는 재귀적으로 구현되어 있습니다.
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_arr = arr[:mid]
right_arr = arr[mid:]
left_arr = merge_sort(left_arr)
right_arr = merge_sort(right_arr)
return merge(left_arr, right_arr)
def merge(left_arr, right_arr):
merged = []
left_index, right_index = 0, 0
while left_index < len(left_arr) and right_index < len(right_arr):
if left_arr[left_index] < right_arr[right_index]:
merged.append(left_arr[left_index])
left_index += 1
else:
merged.append(right_arr[right_index])
right_index += 1
merged += left_arr[left_index:]
merged += right_arr[right_index:]
return merged
합병 정렬은 평균 시간 복잡도가 O(n log n)으로 상대적으로 빠른 정렬 알고리즘 중 하나입니다. 하지만 메모리 사용량이 크다는 단점이 있습니다. 두 개의 부분 배열을 복사하여 만들어야 하기 때문입니다.
728x90
반응형