Untitled
unknown
python
3 years ago
1.1 kB
7
Indexable
def merge(arr, lf, mid, rg): array_left = [arr[i] for i in range(lf, mid)] array_right = [arr[i] for i in range(mid, rg)] array_merged = list() i = j = 0 while i < len(array_left) and j < len(array_right): if array_left[i] <= array_right[j]: array_merged.append(array_left[i]) i += 1 else: array_merged.append(array_right[j]) j += 1 while i < len(array_left): array_merged.append(array_left[i]) i += 1 while j < len(array_right): array_merged.append(array_right[j]) j += 1 return array_merged def merge_sort(arr, lf, rg): if rg - lf <= 1: return mid = (lf + rg) // 2 merge_sort(arr, lf, mid) merge_sort(arr, mid, rg) arr[lf: rg] = merge(arr, lf, mid, rg) def test(): a = [1, 4, 9, 2, 10, 11] b = merge(a, 0, 3, 6) expected = [1, 2, 4, 9, 10, 11] assert b == expected c = [1, 4, 2, 10, 1, 2] merge_sort(c, 0, 6) expected = [1, 1, 2, 2, 4, 10] assert c == expected if __name__ == '__main__': test()
Editor is loading...