Skip to content

Commit a962b6e

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent 97a8891 commit a962b6e

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

sorts/three_way_merge_sort.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
1-
'''
1+
"""
22
In traditional Merge Sort, the array is recursively divided into halves until we reach subarrays of size 1. In 3-way Merge Sort, the array is recursively divided into three parts, reducing the depth of recursion and potentially improving efficiency.
3-
'''
3+
"""
4+
5+
46
def merge(arr, left, mid1, mid2, right):
5-
67
# Sizes of three subarrays
78
size1 = mid1 - left + 1
89
size2 = mid2 - mid1
910
size3 = right - mid2
10-
11+
1112
# Temporary arrays for three parts
12-
left_arr = arr[left:left + size1]
13-
mid_arr = arr[mid1 + 1:mid1 + 1 + size2]
14-
right_arr = arr[mid2 + 1:mid2 + 1 + size3]
15-
13+
left_arr = arr[left : left + size1]
14+
mid_arr = arr[mid1 + 1 : mid1 + 1 + size2]
15+
right_arr = arr[mid2 + 1 : mid2 + 1 + size3]
16+
1617
# Merge three sorted subarrays
1718
i = j = k = 0
1819
index = left
19-
20+
2021
while i < size1 or j < size2 or k < size3:
21-
min_value = float('inf')
22+
min_value = float("inf")
2223
min_idx = -1
23-
24+
2425
# Find the smallest among the three current elements
2526
if i < size1 and left_arr[i] < min_value:
2627
min_value = left_arr[i]
@@ -31,7 +32,7 @@ def merge(arr, left, mid1, mid2, right):
3132
if k < size3 and right_arr[k] < min_value:
3233
min_value = right_arr[k]
3334
min_idx = 2
34-
35+
3536
# Place the smallest element in the merged array
3637
if min_idx == 0:
3738
arr[index] = left_arr[i]
@@ -42,38 +43,38 @@ def merge(arr, left, mid1, mid2, right):
4243
else:
4344
arr[index] = right_arr[k]
4445
k += 1
45-
46+
4647
index += 1
4748

49+
4850
def three_way_merge_sort(arr, left, right):
49-
5051
# Base case: If single element, return
5152
if left >= right:
5253
return
53-
54+
5455
# Finding two midpoints for 3-way split
5556
mid1 = left + (right - left) // 3
5657
mid2 = left + 2 * (right - left) // 3
57-
58+
5859
# Recursively sort first third
5960
three_way_merge_sort(arr, left, mid1)
60-
61+
6162
# Recursively sort second third
6263
three_way_merge_sort(arr, mid1 + 1, mid2)
63-
64+
6465
# Recursively sort last third
6566
three_way_merge_sort(arr, mid2 + 1, right)
66-
67+
6768
# Merge the sorted parts
6869
merge(arr, left, mid1, mid2, right)
6970

71+
7072
if __name__ == "__main__":
71-
7273
# Input array
7374
arr = [5, 2, 9, 1, 6, 3, 8, 4, 7]
74-
75+
7576
# Calling 3-way merge sort function
7677
three_way_merge_sort(arr, 0, len(arr) - 1)
77-
78+
7879
# Printing the sorted array
79-
print(*arr)
80+
print(*arr)

0 commit comments

Comments
 (0)