1
1
def adaptive_merge_sort (sequence : list ) -> list :
2
- """
3
- Sorts a list using the Adaptive Merge Sort algorithm.
4
-
5
- >>> adaptive_merge_sort([4, 3, 1, 2])
6
- Initial sequence: [4, 3, 1, 2]
7
- Sorting: array[0:2] and array[2:4]
8
- Sorting: array[0:1] and array[1:2]
9
- Merging: array[0:1] and array[1:2]
10
- After merge: [3, 4]
11
- Sorting: array[2:3] and array[3:4]
12
- Skipping merge as array[2] <= array[3]
13
- Merging: array[0:2] and array[2:4]
14
- After merge: [1, 2, 3, 4]
15
- Sorted sequence: [1, 2, 3, 4]
16
- [1, 2, 3, 4]
17
- """
18
2
if len (sequence ) < 2 :
19
3
return sequence
20
4
@@ -26,19 +10,6 @@ def adaptive_merge_sort(sequence: list) -> list:
26
10
27
11
28
12
def adaptive_merge_sort_helper (array : list , aux : list , low : int , high : int ) -> None :
29
- """
30
- Helper function for Adaptive Merge Sort algorithm.
31
-
32
- >>> adaptive_merge_sort_helper([4, 3, 1, 2], [4, 3, 1, 2], 0, 3)
33
- Sorting: array[0:2] and array[2:4]
34
- Sorting: array[0:1] and array[1:2]
35
- Merging: array[0:1] and array[1:2]
36
- After merge: [3, 4]
37
- Sorting: array[2:3] and array[3:4]
38
- Skipping merge as array[2] <= array[3]
39
- Merging: array[0:2] and array[2:4]
40
- After merge: [1, 2, 3, 4]
41
- """
42
13
if high <= low :
43
14
return
44
15
@@ -57,23 +28,17 @@ def adaptive_merge_sort_helper(array: list, aux: list, low: int, high: int) -> N
57
28
58
29
59
30
def merge (array : list , aux : list , low : int , mid : int , high : int ) -> None :
60
- """
61
- Merges two sorted subarrays of the main array.
62
-
63
- >>> merge([4, 3, 1, 2], [4, 3, 1, 2], 0, 1, 3)
64
- Merging: array[0:2] and array[2:4]
65
- After merge: [1, 2, 3, 4]
66
- """
67
31
print (f"Merging: array[{ low } :{ mid + 1 } ] and array[{ mid + 1 } :{ high + 1 } ]" )
68
32
69
33
i , j = low , mid + 1
70
34
for k in range (low , high + 1 ):
71
- if i > mid :
72
- aux [k ] = array [j ]
73
- j += 1
74
- elif j > high :
75
- aux [k ] = array [i ]
76
- i += 1
35
+ if i > mid or j > high :
36
+ if i > mid :
37
+ aux [k ] = array [j ]
38
+ j += 1
39
+ else :
40
+ aux [k ] = array [i ]
41
+ i += 1
77
42
elif array [i ] <= array [j ]:
78
43
aux [k ] = array [i ]
79
44
i += 1
0 commit comments