Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- # function to merge sorted subarrays in place
- def mergesort(X, p, q):
- global a
- N = q - p + 1
- if N < 2:
- return
- elif N == 2:
- if X[p] > X[q]:
- tmp = X[p]
- X[p] = X[q]
- X[q] = tmp
- return
- elif N == 3:
- if X[p+1] > X[p+2]:
- tmp = X[p+1]
- X[p+1] = X[p+2]
- X[p+2] = tmp
- if X[p] > X[p+2]:
- tmp = X[p]
- X[p] = X[p+2]
- X[p+2] = tmp
- if X[p] > X[p+1]:
- tmp = X[p]
- X[p] = X[p+1]
- X[p+1] = tmp
- return
- elif N == 4:
- if X[p] > X[p+1]:
- tmp = X[p]
- X[p] = X[p+1]
- X[p+1] = tmp
- if X[p+2] > X[p+3]:
- tmp = X[p+2]
- X[p+2] = X[p+3]
- X[p+3] = tmp
- if X[p] > X[p+2]:
- tmp = X[p]
- X[p] = X[p+2]
- X[p+2] = tmp
- if X[p+1] > X[p+3]:
- tmp = X[p+1]
- X[p+1] = X[p+3]
- X[p+3] = tmp
- if X[p+1] > X[p+2]:
- tmp = X[p+1]
- X[p+1] = X[p+2]
- X[p+2] = tmp
- return
- else:
- mergesort(X, p, p + int(N/2) - 1) #sort first half
- mergesort(X, p + int(N/2), q) # second half
- r = q
- q = p + int(N/2)
- N1 = q - p
- N2 = r - q + 1
- N1 = q - p
- N2 = r - q + 1
- currN = N1 + N2
- ind1 = 0
- ind2 = 0
- indX = p
- left = [0] * N1
- right = [0] * N2
- left[0:N1] = X[p:p+N1]
- right[0:N2] = X[q:q+N2]
- if(X[q-1]<=X[q]):
- return
- while ind1 < N1 and ind2 < N2:
- if left[ind1] > right[ind2]:
- X[indX] = right[ind2]
- ind2 += 1
- else:
- X[indX] = left[ind1]
- ind1 += 1
- indX += 1
- while ind1 < N1:
- X[indX] = left[ind1]
- ind1 += 1
- indX += 1
- while ind2 < N2:
- X[indX] = right[ind2]
- ind2 += 1
- indX += 1
- a = X
- # driver code
- a = np.random.randint(10000, size=10000000)
- mergesort(a, 0, len(a)-1)
- print(a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement