-
[알고리즘] Divide and Conquer 합병정렬 : merge 함수 작성알고리즘 2023. 9. 28. 17:36반응형
실습 설명
Divide and Conquer 방식으로 merge_sort 함수를 써보세요. merge_sort는 파라미터로 리스트 하나를 받고, 정렬된 새로운 리스트를 리턴한다.
merge함수는 이전과제에서 작성한 그대로 사용하면 된다.
답안
def merge(list1, list2): i = 0 j = 0 # 정렬된 항목들을 담을 리스트 merged_list = [] # list1과 list2를 돌면서 merged_list에 항목 정렬 while i < len(list1) and j < len(list2): if list1[i] > list2[j]: merged_list.append(list2[j]) j += 1 else: merged_list.append(list1[i]) i += 1 # list2에 남은 항목이 있으면 정렬 리스트에 추가 if i == len(list1): merged_list += list2[j:] # list1에 남은 항목이 있으면 정렬 리스트에 추가 elif j == len(list2): merged_list += list1[i:] return merged_list def merge_sort(my_list): # base case if len(my_list) < 2: return my_list # my_list를 반씩 나눈다(divide) left_half = my_list[:len(my_list)//2] # 왼쪽 반 right_half = my_list[len(my_list)//2:] # 오른쪽 반 # merge_sort 함수를 재귀적으로 호출하여 부분 문제 해결(conquer)하고, # merge 함수로 정렬된 두 리스트를 합쳐(combine)준다 return merge(merge_sort(left_half), merge_sort(right_half)) # 테스트 코드 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]))
반응형'알고리즘' 카테고리의 다른 글
[알고리즘] Divide and Conquer : 퀵 정렬 구현하기 (0) 2023.09.28 [알고리즘] 퀵정렬 : partition 함수 구현하기 (1) 2023.09.28 [알고리즘] 합병정렬 : merge 함수 작성 (0) 2023.09.28 [알고리즘] Divide and Conquer 분할정복 : 1부터 n까지의합 (0) 2023.09.28 [알고리즘] Brute Force : 런던 폭우 (0) 2023.09.28