ev =[12,42,53,14,86,34]defDivision(ev):
i =0
j =0
k =0iflen(ev)>1:
middle =(0+(len(ev)//2))
l = ev[0:middle]
r = ev[middle:]
Division(l)
Division(r)while(i <len(l)and j <len(r)):if l[i]<= r[j]:
ev[k]= l[i]
i = i +1
k = k +1else:
ev[k]= r[j]
j = j +1
k = k +1while i <len(l):
ev[k]= l[i]
i = i +1
k = k +1while j <len(r):
ev[k]= r[j]
j = j +1
k = k +1defprintList(ev):for x inrange(len(ev)):print(ev[x],end=" ")print()# Driver Codeprint("Before:",end=" ")
printList(ev)
Division(ev)print()print("After:",end=" ")
printList(ev)
"""Mergesort
The cleaner version than geeks4geeks. Although check that code out too!
"""## Method 1: Two functionsdefmergesort(lst):# Is sortableiflen(lst)>1:# Get mid-point
mid =len(lst)//2# Recursive Partition
left = mergesort(lst[:mid])
right = mergesort(lst[mid:])# Mergingreturn merge(left, right)return lst
defmerge(left, right):
new =[]# Left and right not emptywhile left and right:# Compare 1st elements of left and right, sort accordinglyif left[0]< right[0]:
new.append(left.pop(0))else:
new.append(right.pop(0))# Append the leftover numsreturn new + left + right
## Method 2: Nested functionsdefmerge(nums):# Recursive partitioniflen(nums)>1:# Midpoint
mid =len(nums)//2
left = merge(nums[:mid])
right = merge(nums[mid:])# Sortingdefgo(left, right):
newlist =[]# Sort by comparing 1st elements of both listswhile left and right:if left[0]< right[0]:
newlist.append(left.pop(0))else:
newlist.append(right.pop(0))# Cleanup unsorted elements return newlist + left + right
return go(left, right)return nums
# Python program for implementation of MergeSortdefmergeSort(arr):iflen(arr)>1:# Finding the mid of the array
mid =len(arr)//2# Dividing the array elements
L = arr[:mid]# into 2 halves
R = arr[mid:]# Sorting the first half
mergeSort(L)# Sorting the second half
mergeSort(R)
i = j = k =0# Copy data to temp arrays L[] and R[]while i <len(L)and j <len(R):if L[i]< R[j]:
arr[k]= L[i]
i +=1else:
arr[k]= R[j]
j +=1
k +=1# Checking if any element was leftwhile i <len(L):
arr[k]= L[i]
i +=1
k +=1while j <len(R):
arr[k]= R[j]
j +=1
k +=1# Code to print the listdefprintList(arr):for i inrange(len(arr)):print(arr[i], end=" ")print()# Driver Codeif __name__ =='__main__':
arr =[12,11,13,5,6,7]print("Given array is", end="
")
printList(arr)
mergeSort(arr)print("Sorted array is: ", end="
")
printList(arr)# This code is contributed by Mayank Khanna
defmergeSort(A):iflen(A)>1:print('Splitting', A)
mid =len(A)//2
left = A[:mid]
right = A[mid:]
mergeSort(left)
mergeSort(right)
i = j = k =0while i <len(left)and j <len(right):if left[i]< right[j]:
A[k]= left[i]
i = i+1else:
A[k]= left[i]
j = j+1
k = k+1while i <len(left):
A[k]= left[i]
i = i+1
k = k+1while j <len(right):
A[k]= right[j]
j = j+1
k = k+1print('merging', A)return(A)
# Python program for implementation of MergeSort# Merges two subarrays of arr[].# First subarray is arr[l..m]# Second subarray is arr[m+1..r]defmerge(arr, l, m, r):
n1 = m - l +1
n2 = r - m
# create temp arrays
L =[0]*(n1)
R =[0]*(n2)# Copy data to temp arrays L[] and R[]for i inrange(0, n1):
L[i]= arr[l + i]for j inrange(0, n2):
R[j]= arr[m +1+ j]# Merge the temp arrays back into arr[l..r]
i =0# Initial index of first subarray
j =0# Initial index of second subarray
k = l # Initial index of merged subarraywhile i < n1 and j < n2:if L[i]<= R[j]:
arr[k]= L[i]
i +=1else:
arr[k]= R[j]
j +=1
k +=1# Copy the remaining elements of L[], if there# are anywhile i < n1:
arr[k]= L[i]
i +=1
k +=1# Copy the remaining elements of R[], if there# are anywhile j < n2:
arr[k]= R[j]
j +=1
k +=1# l is for left index and r is right index of the# sub-array of arr to be sorteddefmergeSort(arr, l, r):if l < r:# Same as (l+r)//2, but avoids overflow for# large l and h
m = l+(r-l)//2# Sort first and second halves
mergeSort(arr, l, m)
mergeSort(arr, m+1, r)
merge(arr, l, m, r)# Driver code to test above
arr =[12,11,13,5,6,7]
n =len(arr)print("Given array is")for i inrange(n):print("%d"% arr[i],end=" ")
mergeSort(arr,0, n-1)print("
Sorted array is")for i inrange(n):print("%d"% arr[i],end=" ")# This code is contributed by Mohit Kumra
# Python program for implementation of MergeSort# Merges two subarrays of arr[].# First subarray is arr[l..m]# Second subarray is arr[m+1..r]defmerge(arr, l, m, r):
n1 = m - l +1
n2 = r - m
# create temp arrays
L =[0]*(n1)
R =[0]*(n2)# Copy data to temp arrays L[] and R[]for i inrange(0, n1):
L[i]= arr[l + i]for j inrange(0, n2):
R[j]= arr[m +1+ j]# Merge the temp arrays back into arr[l..r]
i =0# Initial index of first subarray
j =0# Initial index of second subarray
k = l # Initial index of merged subarraywhile i < n1 and j < n2:if L[i]<= R[j]:
arr[k]= L[i]
i +=1else:
arr[k]= R[j]
j +=1
k +=1# Copy the remaining elements of L[], if there# are anywhile i < n1:
arr[k]= L[i]
i +=1
k +=1# Copy the remaining elements of R[], if there# are anywhile j < n2:
arr[k]= R[j]
j +=1
k +=1# l is for left index and r is right index of the# sub-array of arr to be sorteddefmergeSort(arr, l, r):if l < r:# Same as (l+r)//2, but avoids overflow for# large l and h
m = l+(r-l)//2# Sort first and second halves
mergeSort(arr, l, m)
mergeSort(arr, m+1, r)
merge(arr, l, m, r)# Driver code to test above
arr =[12,11,13,5,6,7]
n =len(arr)print("Given array is")for i inrange(n):print("%d"% arr[i],end=" ")
mergeSort(arr,0, n-1)print("
Sorted array is")for i inrange(n):print("%d"% arr[i],end=" ")