알고리즘/정렬
합병 정렬 with. Divide and Conquer
아몬드바
2023. 8. 4. 23:33
728x90
풀이법
Divide : 리스트를 반으로 나눈다.
Conquer : 왼쪽과 오른쪽 각각 정렬을 수행
Combine : 정렬된 두 리스트를 하나의 정렬된 리스트로 합병
- 왼쪽과 오른쪽의 맨 앞의 원소가 제일 작으므로 맨 앞의 원소부터 비교를 해서 작은것부터 넣어줘야함
def merge(list1, list2):
return sorted(list1 + list2)
# 합병 정렬
def merge_sort(my_list):
if len(my_list) < 2:
return my_list
mid = len(my_list) // 2
return merge(merge_sort(my_list[0:mid]), merge_sort(my_list[mid:]))
# 테스트 코드
print(merge_sort([1, 3, 5, 7, 9, 11, 13, 11]))
print(merge_sort([28, 13, 9, 30, 1, 48, 5, 7, 15]))
print(merge_sort([2, 5, 6, 7, 1, 2, 4, 7, 10, 11, 4, 15, 13, 1, 6, 4]))
728x90