diff --git a/guide/english/algorithms/sorting-algorithms/merge-sort/index.md b/guide/english/algorithms/sorting-algorithms/merge-sort/index.md index 7cf8be8778..0264277eb1 100644 --- a/guide/english/algorithms/sorting-algorithms/merge-sort/index.md +++ b/guide/english/algorithms/sorting-algorithms/merge-sort/index.md @@ -211,46 +211,37 @@ void mergesort(int A[],int size_a,int B[],int size_b,int C[]) ### Implementation in Python ```python -temp = None -def merge(arr, left, right): - global temp, inversions - mid = (left + right) // 2 - for i in range(left, right + 1): - temp[i] = arr[i] - - k, L, R = left, left, mid + 1 - while L <= mid and R <= right: - if temp[L] <= temp[R]: - arr[k] = temp[L] - L += 1 - else: - arr[k] = temp[R] - R += 1 - k += 1 - - while L <= mid: - arr[k] = temp[L] - L += 1 - k += 1 - - while R <= right: - arr[k] = temp[R] - R += 1 - k += 1 - -def merge_sort(arr, left, right): - if left >= right: - return - - mid = (left + right) // 2 - merge_sort(arr, left, mid) - merge_sort(arr, mid + 1, right) - merge(arr, left, right) +def merge(left,right,compare): + result = [] + i,j = 0,0 + while (i < len(left) and j < len(right)): + if compare(left[i],right[j]): + result.append(left[i]) + i += 1 + else: + result.append(right[j]) + j += 1 + while (i < len(left)): + result.append(left[i]) + i += 1 + while (j < len(right)): + result.append(right[j]) + j += 1 + return result -arr = [1,6,3,1,8,4,2,9,3] -temp = [None for _ in range(len(arr))] -merge_sort(arr, 0, len(arr) - 1) -print(arr, inversions) +def merge_sort(arr, compare = lambda x, y: x < y): + #Used lambda function to sort array in both(increasing and decresing) order. + #By default it sorts array in increasing order + if len(arr) < 2: + return arr[:] + else: + middle = len(arr) // 2 + left = merge_sort(arr[:middle], compare) + right = merge_sort(arr[middle:], compare) + return merge(left, right, compare) + +arr = [2,1,4,5,3] +print(merge_sort(arr)) ``` ### Implementation in Java