Advertisement
darkhorse5475

Untitled

Oct 13th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. # compare timing of bubble, merge, and built-in sort
  2. from timeit import timeit
  3. from random import randint
  4.  
  5. def bubble_sort(unsorted):
  6. sorted = unsorted[:]
  7. swapped = True
  8. while swapped == True:
  9. swapped = False
  10. for i in range(len(sorted) - 1):
  11. if sorted[i] > sorted[i+1]:
  12. sorted[i], sorted[i+1] = sorted[i+1], sorted[i]
  13. swapped = True
  14. return sorted
  15.  
  16. def merge(list_a, list_b):
  17. list_c = []
  18. while len(list_a) > 0 and len(list_b) > 0:
  19. if list_a[0] < list_b[0]:
  20. list_c.append(list_a.pop(0))
  21. else:
  22. list_c.append(list_b.pop(0))
  23. if list_a == []:
  24. list_c += list_b
  25. else:
  26. list_c += list_a
  27. # print("merged list is", list_c)
  28. return list_c
  29.  
  30. def merge_sort(unsorted):
  31. if len(unsorted) <= 1:
  32. return unsorted
  33. else:
  34. middle = len(unsorted) // 2
  35. front = unsorted[:middle]
  36. back = unsorted[middle:]
  37. return merge(front, back)
  38.  
  39. def tim_sort(unsorted):
  40. return sorted(unsorted)
  41.  
  42. #Generate a random list
  43. list_to_sort = [randint(0,10000) for i in range(500)]
  44.  
  45. tiny_list = [randint(0,10000) for i in range(10)]
  46.  
  47. ordered_list = sorted(list_to_sort)
  48.  
  49. def nearly_ordered(list_to_sort):
  50. ordered_list = sorted(list_to_sort)
  51. ordered_list.append(ordered_list.pop(5))
  52. return ordered_list
  53.  
  54. def reversed_list(list_to_sort):
  55. ordered_list = sorted(list_to_sort)
  56. ordered_list.reverse()
  57. return ordered_list
  58.  
  59. #Create anonymous functions to use with timeit, be sure to check these function names match your pasted ones
  60. bs = lambda: bubble_sort(list_to_sort)
  61. ms = lambda: merge_sort(list_to_sort)
  62. ts = lambda: tim_sort(list_to_sort)
  63.  
  64. bs2 = lambda: bubble_sort(ordered_list)
  65. ms2 = lambda: merge_sort(ordered_list)
  66. ts2 = lambda: tim_sort(ordered_list)
  67.  
  68. bs3 = lambda: bubble_sort(tiny_list)
  69. ms3 = lambda: merge_sort(tiny_list)
  70. ts3 = lambda: tim_sort(tiny_list)
  71.  
  72. bs4 = lambda: bubble_sort(nearly_ordered(list_to_sort))
  73. ms4 = lambda: merge_sort(nearly_ordered(list_to_sort))
  74. ts4 = lambda: tim_sort(nearly_ordered(list_to_sort))
  75.  
  76. bs5 = lambda: bubble_sort(reversed_list(list_to_sort))
  77. ms5 = lambda: merge_sort(reversed_list(list_to_sort))
  78. ts5 = lambda: tim_sort(reversed_list(list_to_sort))
  79.  
  80.  
  81. #time the functions for 100 runs each
  82. print("Using an unordered list")
  83. print("Merge took:")
  84. print(timeit(ms, number = 100))
  85. print("Bubble took:")
  86. print(timeit(bs, number = 100))
  87. print("Timsort took:")
  88. print(timeit(ts, number = 100))
  89.  
  90. print("Using an ordered list")
  91. print("Merge took:")
  92. print(timeit(ms2, number = 100))
  93. print("Bubble took:")
  94. print(timeit(bs2, number = 100))
  95. print("Timsort took:")
  96. print(timeit(ts2, number = 100))
  97.  
  98. print("Using a tiny list")
  99. print("Merge took:")
  100. print(timeit(ms3, number = 100))
  101. print("Bubble took:")
  102. print(timeit(bs3, number = 100))
  103. print("Timsort took:")
  104. print(timeit(ts3, number = 100))
  105.  
  106. print("Using a nearly sorted list")
  107. print("Merge took:")
  108. print(timeit(ms4, number = 100))
  109. print("Bubble took:")
  110. print(timeit(bs4, number = 100))
  111. print("Timsort took:")
  112. print(timeit(ts4, number = 100))
  113.  
  114. print("Using a reversed list")
  115. print("Merge took:")
  116. print(timeit(ms5, number = 100))
  117. print("Bubble took:")
  118. print(timeit(bs5, number = 100))
  119. print("Timsort took:")
  120. print(timeit(ts5, number = 100))
  121.  
  122. # https://pastebin.com/E9YjSk1Z
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement