Skip to content

Commit 4f293f7

Browse files
committed
Cleaned up implementation; got rid of domergesort worker function
1 parent 7e26e7f commit 4f293f7

1 file changed

Lines changed: 36 additions & 48 deletions

File tree

MergeSortPython.py

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,38 @@
1-
import random
2-
3-
arr = [ random.randint(0, 100) for i in range(0, 10) ]
4-
5-
print "Initial array is:", arr
6-
7-
def mergesort(arr):
8-
def domergesort(arr1, arr2):
9-
"""
10-
Actual implementation of merge sort
11-
"""
12-
if len(arr1) > 1:
13-
marr1 = domergesort(arr1[:len(arr1)/2], arr1[len(arr1)/2:])
14-
else:
15-
marr1 = arr1
16-
if len(arr2) > 1:
17-
marr2 = domergesort(arr2[:len(arr2)/2], arr2[len(arr2)/2:])
18-
else:
19-
marr2 = arr2
20-
21-
# now both arrays are sorted, merge them
22-
arr1index = 0
23-
arr2index = 0
24-
marr = []
25-
while (arr1index < len(marr1)) or (arr2index < len(marr2)):
26-
# array 1 fully merged take element from array 2
27-
if arr1index == len(marr1):
28-
marr.append(marr2[arr2index])
29-
arr2index = arr2index + 1
30-
# array 2 fully merged take element from array 1
31-
elif arr2index == len(marr2):
32-
marr.append(marr1[arr1index])
33-
arr1index = arr1index + 1
34-
# both arrays still have elements but array 1 elem <= array 2 elem
35-
elif marr1[arr1index] <= marr2[arr2index]:
36-
marr.append(marr1[arr1index])
37-
arr1index = arr1index + 1
38-
# both arrays still have elements but array 1 elem > array 2 elem
39-
elif marr1[arr1index] > marr2[arr2index]:
40-
marr.append(marr2[arr2index])
41-
arr2index = arr2index + 1
42-
43-
return marr
44-
45-
if len(arr) <= 1:
46-
return arr
1+
def mergesort(array):
2+
if len(array) < 2:
3+
return array
474
else:
48-
return domergesort(arr[:len(arr)/2], arr[len(arr)/2:])
5+
subarray1 = mergesort(array[:len(array)/2])
6+
subarray2 = mergesort(array[len(array)/2:])
7+
8+
# merge sorted sub-arrays
9+
arr1index = 0
10+
arr2index = 0
11+
mergedarray = []
12+
while (arr1index < len(subarray1)) or (arr2index < len(subarray2)):
13+
# array 1 fully merged take element from array 2
14+
if arr1index == len(subarray1):
15+
mergedarray.append(subarray2[arr2index])
16+
arr2index = arr2index + 1
17+
# array 2 fully merged take element from array 1
18+
elif arr2index == len(subarray2):
19+
mergedarray.append(subarray1[arr1index])
20+
arr1index = arr1index + 1
21+
# both arrays still have elements but array 1 elem <= array 2 elem
22+
elif subarray1[arr1index] <= subarray2[arr2index]:
23+
mergedarray.append(subarray1[arr1index])
24+
arr1index = arr1index + 1
25+
# both arrays still have elements but array 1 elem > array 2 elem
26+
elif subarray1[arr1index] > subarray2[arr2index]:
27+
mergedarray.append(subarray2[arr2index])
28+
arr2index = arr2index + 1
29+
30+
return mergedarray
31+
32+
if __name__ == "__main__":
33+
import random
34+
35+
array = [ random.randint(0, 100) for i in range(0, 10) ]
4936

50-
print "Merged array is:", mergesort(arr)
37+
print "Initial array is:", array
38+
print "Merged array is:", mergesort(array)

0 commit comments

Comments
 (0)