Advertisement
akariya

ECE592 Project 1 iterative mergesort

Sep 22nd, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.85 KB | None | 0 0
  1. import numpy as np
  2.  
  3. # function to merge sorted subarrays in place
  4. def mergesort(X):
  5.  
  6.     global a
  7.  
  8.     N = len(X)
  9.     mergesize = 1 #*2
  10.     while(mergesize <=  N-1):
  11.         left = 0
  12.         while(left < N - 1):
  13.             r = min(left + 2*mergesize - 1, N - 1)
  14.             q = min(left + mergesize - 1, N - 1)
  15.             p = left
  16.             if (r-p) <= 1:
  17.                 if X[p] > X[r]:
  18.                     tmp = X[p]
  19.                     X[p] = X[r]
  20.                     X[r] = tmp
  21.             elif (r-p) == 2:
  22.                 if X[p+1] > X[p+2]:
  23.                     tmp = X[p+1]
  24.                     X[p+1] = X[p+2]
  25.                     X[p+2] = tmp
  26.                 if X[p] > X[p+2]:
  27.                     tmp = X[p]
  28.                     X[p] = X[p+2]
  29.                     X[p+2] = tmp
  30.                 if X[p] > X[p+1]:
  31.                     tmp = X[p]
  32.                     X[p] = X[p+1]
  33.                     X[p+1] = tmp
  34.             elif (r-p) == 3:
  35.                 if X[p] > X[p+1]:
  36.                     tmp = X[p]
  37.                     X[p] = X[p+1]
  38.                     X[p+1] = tmp
  39.                 if X[p+2] > X[p+3]:
  40.                     tmp = X[p+2]
  41.                     X[p+2] = X[p+3]
  42.                     X[p+3] = tmp
  43.                 if X[p] > X[p+2]:
  44.                     tmp = X[p]
  45.                     X[p] = X[p+2]
  46.                     X[p+2] = tmp
  47.                 if X[p+1] > X[p+3]:
  48.                     tmp = X[p+1]
  49.                     X[p+1] = X[p+3]
  50.                     X[p+3] = tmp
  51.                 if X[p+1] > X[p+2]:
  52.                     tmp = X[p+1]
  53.                     X[p+1] = X[p+2]
  54.                     X[p+2] = tmp
  55.             else:
  56.                 N1 = q - p + 1
  57.                 N2 = r - q
  58.                 currN = N1 + N2
  59.                 ind1 = 0
  60.                 ind2 = 0
  61.                 indX = p
  62.                 leftX = [0] * N1
  63.                 rightX = [0] * N2
  64.                 leftX[0:N1] = X[p:p+N1]
  65.                 rightX[0:N2] = X[q+1:q+N2+1]
  66.                 if((q+1)<N and X[q]<=X[q+1]):
  67.                     N1 = 0
  68.                     N2 = 0
  69.  
  70.                 while ind1 < N1 and ind2 < N2:
  71.                     if leftX[ind1] > rightX[ind2]:
  72.                         X[indX] = rightX[ind2]
  73.                         ind2 += 1
  74.                     else:
  75.                         X[indX] = leftX[ind1]
  76.                         ind1 += 1
  77.                     indX += 1
  78.              
  79.                 while ind1 < N1:
  80.                     X[indX] = leftX[ind1]
  81.                     ind1 += 1
  82.                     indX += 1
  83.              
  84.                 while ind2 < N2:
  85.                     X[indX] = rightX[ind2]
  86.                     ind2 += 1
  87.                     indX += 1
  88.             left += 2*mergesize
  89.         mergesize *= 2
  90.  
  91.     a = X
  92.  
  93. # driver code
  94. a = np.random.randint(10000, size=1000000)
  95. mergesort(a)
  96. print(a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement