|
1 | | -def merge(a, b, m, e): |
2 | | - l = a[b : m + 1] # noqa: E741 |
3 | | - r = a[m + 1 : e + 1] |
4 | | - k = b |
| 1 | +def merge(arr, left, mid, right): |
| 2 | + # overall array will divided into 2 array |
| 3 | + # left_arr contains the left portion of array from left to mid |
| 4 | + # right_arr contains the right portion of array from mid + 1 to right |
| 5 | + left_arr = arr[left : mid + 1] |
| 6 | + right_arr = arr[mid + 1 : right + 1] |
| 7 | + k = left |
5 | 8 | i = 0 |
6 | 9 | j = 0 |
7 | | - while i < len(l) and j < len(r): |
| 10 | + while i < len(left_arr) and j < len(right_arr): |
8 | 11 | # change sign for Descending order |
9 | | - if l[i] < r[j]: |
10 | | - a[k] = l[i] |
| 12 | + if left_arr[i] < right_arr[j]: |
| 13 | + arr[k] = left_arr[i] |
11 | 14 | i += 1 |
12 | 15 | else: |
13 | | - a[k] = r[j] |
| 16 | + arr[k] = right_arr[j] |
14 | 17 | j += 1 |
15 | 18 | k += 1 |
16 | | - while i < len(l): |
17 | | - a[k] = l[i] |
| 19 | + while i < len(left_arr): |
| 20 | + arr[k] = left_arr[i] |
18 | 21 | i += 1 |
19 | 22 | k += 1 |
20 | | - while j < len(r): |
21 | | - a[k] = r[j] |
| 23 | + while j < len(right_arr): |
| 24 | + arr[k] = right_arr[j] |
22 | 25 | j += 1 |
23 | 26 | k += 1 |
24 | | - return a |
| 27 | + return arr |
25 | 28 |
|
26 | 29 |
|
27 | | -def mergesort(a, b, e): |
| 30 | +def mergesort(arr, left, right): |
28 | 31 | """ |
29 | | - >>> mergesort([3,2,1],0,2) |
| 32 | + >>> mergesort([3, 2, 1], 0, 2) |
30 | 33 | [1, 2, 3] |
31 | | - >>> mergesort([3,2,1,0,1,2,3,5,4],0,8) |
| 34 | + >>> mergesort([3, 2, 1, 0, 1, 2, 3, 5, 4], 0, 8) |
32 | 35 | [0, 1, 1, 2, 2, 3, 3, 4, 5] |
33 | 36 | """ |
34 | | - if b < e: |
35 | | - m = (b + e) // 2 |
| 37 | + if left < right: |
| 38 | + mid = (left + right) // 2 |
36 | 39 | # print("ms1",a,b,m) |
37 | | - mergesort(a, b, m) |
| 40 | + mergesort(arr, left, mid) |
38 | 41 | # print("ms2",a,m+1,e) |
39 | | - mergesort(a, m + 1, e) |
| 42 | + mergesort(arr, mid + 1, right) |
40 | 43 | # print("m",a,b,m,e) |
41 | | - merge(a, b, m, e) |
42 | | - return a |
| 44 | + merge(arr, left, mid, right) |
| 45 | + return arr |
43 | 46 |
|
44 | 47 |
|
45 | 48 | if __name__ == "__main__": |
|
0 commit comments