큰 문제를 작은 문제로 나눠도 해결방법은 똑같을 때
분할
) 👉 합침(정복
)분할하는 함수
, 분할한 범위 내에서 필요한 처리를 하는 함수
각각 정의def divide(arr):
if len(arr) <= 1: #범위의 길이가 1이면 더이상 나누지x
return arr
left = divide(arr[처음~len(arr)/2])
right = divide(arr[len(arr)/2~끝])
return process(left, right) #처리 함수의 결과값(array)을 return
left=재귀함수
, right=재귀함수
if(배열길이1) return 배열
left=길이1인 배열
, right=길이1인 배열
로 계산 시작 가능def process(left, right):
result = []
#left, right 가지고 필요한 처리를 함
return result
📌 분할하는 함수
def merge_sort(arr):
if len(arr) <= 1:
return arr
left = merge_sort(arr[:len(arr)//2])
right = merge_sort(arr[len(arr)//2:])
return merge_array(left, right)
📌 처리 함수
def merge_array(a, b):
result = []
i = 0; j = 0
while i < len(a) and j < len(b):
if a[i] < b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
while i < len(a):
result.append(a[i])
i += 1
while j < len(b):
result.append(b[j])
j += 1
return result
👍💕