defmerge_sort(m):iflen(m)<=1:#size가 0이거나 1인 경우 바로 returnreturn m# 1. Divide 부분 mid =len(m)//2 left = m[:mid] right = m[mid:]#list의 크기가 1이 될 때까지 merge_sort 재귀 호출 left =merge_sort(left) right =merge_sort(right)# 2. Conquer 부분: 분할된 list들 병합 ruturn merge(left, right)
병합 과정의 알고리즘
defmerge(left,right): result = [] #두 개의 분할된 list를 병합하여 result를 만듦whilelen(left)>0andlen(right)>0:#양쪽 list에 원소가 남아있는 경우#두 sub list의 첫 원소들을 비교하여 작은 것부터 result에 추가함if left[0]<= right[0]: result.append(left.pop(0))else: result.append(right.pop(0))iflen(left)>0:#왼쪽 list에 원소가 남아있는 경우 result.extend(left)iflen(right)>0:#오른쪽 list에 원소가 남아있는 경우 result.extend(right)return result