Guest User

Untitled

a guest
Feb 17th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. from itertools import repeat
  2. import random
  3. import time
  4.  
  5.  
  6. def insertion_sort(A, p, r):
  7. for j in range(p + 1, r + 1):
  8. key = A[j]
  9. i = j - 1
  10. while i >= p and A[i] > key:
  11. A[i + 1] = A[i]
  12. i = i - 1
  13. A[i + 1] = key
  14.  
  15. def merge(A, p, q, r):
  16. n1 = q - p + 1
  17. n2 = r - q
  18.  
  19. L = list(repeat(None, n1))
  20. R = list(repeat(None, n2))
  21.  
  22. for i in range(n1):
  23. L[i] = A[p + i]
  24.  
  25. for j in range(n2):
  26. R[j] = A[q + j + 1]
  27.  
  28. i = 0
  29. j = 0
  30. for k in range(p, r + 1):
  31. if i == n1:
  32. A[k] = R[j]
  33. j += 1
  34. elif j == n2:
  35. A[k] = L[i]
  36. i += 1
  37. elif L[i] <= R[j]:
  38. A[k] = L[i]
  39. i += 1
  40. else:
  41. A[k] = R[j]
  42. j += 1
  43.  
  44. def merge_sort(A, p, r):
  45. if p < r:
  46. q = int((p + r) / 2)
  47. merge_sort(A, p, q)
  48. merge_sort(A, q + 1, r)
  49. merge(A, p, q, r)
  50.  
  51. def mixed_sort(A, p, r):
  52. if p >= r: return
  53.  
  54. if r - p < 20:
  55. insertion_sort(A, p, r)
  56. else:
  57. q = int((p + r) / 2)
  58. mixed_sort(A, p, q)
  59. mixed_sort(A, q + 1, r)
  60. merge(A, p, q, r)
  61.  
  62. def mergeSort(A):
  63. p = 0
  64. r = len(A) - 1
  65. merge_sort(A, p, r)
  66.  
  67. def mixedSort(A):
  68. p = 0
  69. r = len(A) - 1
  70. mixed_sort(A, p, r)
  71.  
  72. def main():
  73. N = [10, 20, 30, 40, 50, 100, 500, 1000, 5000, 10000]
  74. low = 0
  75. high = 10000
  76.  
  77. print("Random Unique Values Merge Sort: ")
  78. for n in N:
  79. data = random.sample(range(low, high), n)
  80. total_elapsed_time = 0
  81. for i in range(3):
  82. start_time = time.time()
  83. mergeSort(data)
  84. end_time = time.time()
  85. total_elapsed_time += end_time - start_time
  86. avg_time = total_elapsed_time / 3
  87. print("N({0}): Avg. {1:f} seconds".format(n, avg_time))
  88.  
  89. print("Random Unique Values Mixed Insertion sort: ")
  90. for n in N:
  91. data = random.sample(range(low, high), n)
  92. total_elapsed_time = 0
  93. for i in range(3):
  94. start_time = time.time()
  95. mixedSort(data)
  96. end_time = time.time()
  97. total_elapsed_time = end_time - start_time
  98. avg_time = total_elapsed_time / 3
  99. print("N({0}): Avg. {1:f} seconds".format(n, avg_time))
  100.  
  101. main()
Add Comment
Please, Sign In to add comment