Skip to content

Commit 93e9039

Browse files
authored
Iterative Merge Sort
implementation of Iterative Merge Sort.
1 parent 2d34fc1 commit 93e9039

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Iterative Merge sort (Bottom Up)
2+
3+
# Iterative mergesort function to
4+
# sort arr[0...n-1]
5+
def mergeSort(a):
6+
7+
current_size = 1
8+
9+
# Outer loop for traversing Each
10+
# sub array of current_size
11+
while current_size < len(a) - 1:
12+
13+
left = 0
14+
# Inner loop for merge call
15+
# in a sub array
16+
# Each complete Iteration sorts
17+
# the iterating sub array
18+
while left < len(a)-1:
19+
20+
# mid index = left index of
21+
# sub array + current sub
22+
# array size - 1
23+
mid = min((left + current_size - 1),(len(a)-1))
24+
25+
# (False result,True result)
26+
# [Condition] Can use current_size
27+
# if 2 * current_size < len(a)-1
28+
# else len(a)-1
29+
right = ((2 * current_size + left - 1,
30+
len(a) - 1)[2 * current_size
31+
+ left - 1 > len(a)-1])
32+
33+
# Merge call for each sub array
34+
merge(a, left, mid, right)
35+
left = left + current_size*2
36+
37+
# Increasing sub array size by
38+
# multiple of 2
39+
current_size = 2 * current_size
40+
41+
# Merge Function
42+
def merge(a, l, m, r):
43+
n1 = m - l + 1
44+
n2 = r - m
45+
L = [0] * n1
46+
R = [0] * n2
47+
for i in range(0, n1):
48+
L[i] = a[l + i]
49+
for i in range(0, n2):
50+
R[i] = a[m + i + 1]
51+
52+
i, j, k = 0, 0, l
53+
while i < n1 and j < n2:
54+
if L[i] > R[j]:
55+
a[k] = R[j]
56+
j += 1
57+
else:
58+
a[k] = L[i]
59+
i += 1
60+
k += 1
61+
62+
while i < n1:
63+
a[k] = L[i]
64+
i += 1
65+
k += 1
66+
67+
while j < n2:
68+
a[k] = R[j]
69+
j += 1
70+
k += 1
71+
72+
73+
# Driver code
74+
a = [12, 11, 13, 5, 6, 7]
75+
print("Given array is ")
76+
print(a)
77+
78+
mergeSort(a)
79+
80+
print("Sorted array is ")
81+
print(a)
82+
83+
# This code is contributed by mohd-mehraj.

0 commit comments

Comments
 (0)