Skip to content

Commit c8397d4

Browse files
authored
Update adaptive_merge_sort.py
1 parent eb3284d commit c8397d4

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

sorts/adaptive_merge_sort.py

+20-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
def adaptive_merge_sort(sequence: list) -> list:
1+
def adaptive_merge_sort(sequence: list) -> list:
22
"""
33
Sorts a list using the Adaptive Merge Sort algorithm.
44
@@ -17,6 +17,7 @@ def adaptive_merge_sort(sequence: list) -> list:
1717
"""
1818
if len(sequence) < 2:
1919
return sequence
20+
2021
aux = sequence[:]
2122
print(f"Initial sequence: {sequence}")
2223
adaptive_merge_sort_helper(sequence, aux, 0, len(sequence) - 1)
@@ -40,14 +41,18 @@ def adaptive_merge_sort_helper(array: list, aux: list, low: int, high: int) -> N
4041
"""
4142
if high <= low:
4243
return
44+
4345
mid = (low + high) // 2
4446
print(f"Sorting: array[{low}:{mid + 1}] and array[{mid + 1}:{high + 1}]")
47+
4548
adaptive_merge_sort_helper(aux, array, low, mid)
4649
adaptive_merge_sort_helper(aux, array, mid + 1, high)
50+
4751
if array[mid] <= array[mid + 1]:
4852
print(f"Skipping merge as array[{mid}] <= array[{mid + 1}]")
49-
array[low : high + 1] = aux[low : high + 1]
53+
array[low:high + 1] = aux[low:high + 1]
5054
return
55+
5156
merge(array, aux, low, mid, high)
5257

5358

@@ -60,6 +65,7 @@ def merge(array: list, aux: list, low: int, mid: int, high: int) -> None:
6065
After merge: [1, 2, 3, 4]
6166
"""
6267
print(f"Merging: array[{low}:{mid + 1}] and array[{mid + 1}:{high + 1}]")
68+
6369
i, j = low, mid + 1
6470
for k in range(low, high + 1):
6571
if i > mid:
@@ -68,13 +74,19 @@ def merge(array: list, aux: list, low: int, mid: int, high: int) -> None:
6874
elif j > high:
6975
aux[k] = array[i]
7076
i += 1
71-
elif array[j] < array[i]:
72-
aux[k] = array[j]
73-
j += 1
74-
else:
77+
elif array[i] <= array[j]: # Keep stable by using <=
7578
aux[k] = array[i]
7679
i += 1
77-
# Ensure we correctly copy back to the main array
80+
else:
81+
aux[k] = array[j]
82+
j += 1
83+
7884
for k in range(low, high + 1):
7985
array[k] = aux[k]
80-
print(f"After merge: {aux[low:high + 1]}")
86+
87+
print(f"After merge: {array[low:high + 1]}")
88+
89+
90+
# Example usage
91+
if __name__ == "__main__":
92+
print(adaptive_merge_sort([4, 3, 1, 2]))

0 commit comments

Comments
 (0)