def mergeSort(arr, l, r): if l < r: # Same as (l+r)//2, but avoids overflow for large l and h m = (l + (r - 1)) // 2 # Sort first and second halves mergeSort(arr, l, m) # 분할 단계 mergeSort(arr, m + 1, r) # 분할 단계 merge(arr, l, m, r) # 합병 단계def merge(arr, l, m, r): “”” Merges two subarrays of arr[]. First subarray is arr[l..m] Second subarray is arr[m+1..r] “”” n1 = m - l + 1 # 왼쪽 subarray의 길이 n2 = r - m # 오른쪽 subarray의 길이 # create temp arrays L = [0] * (n1) R = [0] * (n2) # Copy data to temp arrays L[] and R[] for i in range(0 , n1): L[i] = arr[l + i] for j in range(0 , n2): R[j] = arr[m + 1 + j] # Merge the temp arrays back into arr[l..r] i = 0 # Initial index of first subarray j = 0 # Initial index of second subarray k = l # Initial index of merged subarray while i < n1 and j < n2 : if L[i] <= R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 # Copy the remaining elements of L[], if there are any while i < n1: arr[k] = L[i] i += 1 k += 1 # Copy the remaining elements of R[], if there are any while j < n2: arr[k] = R[j] j += 1 k += 1n = len(arr)mergeSort(arr, 0, n-1) # 호출 방법
Drawbacks of Merge Sort
Slower comparative to the other sort algorithms for smaller tasks.
Merge sort algorithm requires additional memory space of O(n) for the temporary array.
It goes through the whole process even if the array is sorted.