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