Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. def insertion_sort(A):
  2. for key_index in range(1,len(A)):
  3. key_value = A[key_index]
  4. compare_index = key_index-1
  5. while compare_index>=0 and A[compare_index]>key_value:
  6. A[compare_index+1]=A[compare_index]
  7. compare_index -= 1
  8. A[compare_index+1] = key_value
  9.  
  10. def merge(left, right):
  11. result = []
  12. left_index = 0
  13. right_index = 0
  14. while left_index < len(left) and right_index<len(right):
  15. if left[left_index] < right[right_index]:
  16. result.append(left[left_index])
  17. left_index += 1
  18. else:
  19. result.append(right[right_index])
  20. right_index += 1
  21. result.extend(left[left_index:len(left)])
  22. result.extend(right[right_index:len(right)])
  23. return result
  24.  
  25. def merge_sort(A):
  26. if len(A)<=1:
  27. return A
  28. mid = len(A) // 2
  29. left = merge_sort(A[0:mid])
  30. right = merge_sort(A[mid:len(A)])
  31. return merge(left, right)
  32.  
  33. def max_heapify(A, root_index, len_A):
  34. left_index = 2*root_index + 1
  35. right_index = 2*root_index + 2
  36. max_index = root_index
  37. if left_index < len_A and A[left_index]>A[max_index]:
  38. max_index = left_index
  39. if right_index < len_A and A[right_index]>A[max_index]:
  40. max_index = right_index
  41. if max_index != root_index:
  42. A[root_index], A[max_index] = A[max_index],A[root_index]
  43. max_heapify(A, max_index, len_A)
  44.  
  45. def build_max_heap(A):
  46. for index in range(len(A)//2,-1,-1):
  47. max_heapify(A, index, len(A))
  48.  
  49. def my_heap_sort(A):
  50. build_max_heap(A)
  51. for heap_size in range(len(A)-1, 0, -1):
  52. A[0],A[heap_size] = A[heap_size],A[0]
  53. max_heapify(A, 0, heap_size)
  54.  
  55. def partition(A, start, end):
  56. pivot_index = end-1
  57. pivot_value = A[pivot_index]
  58. mid_index = start
  59. for large_index in range(start, pivot_index):
  60. if A[large_index] <= pivot_value:
  61. A[mid_index],A[large_index] = A[large_index],A[mid_index]
  62. mid_index += 1
  63. A[mid_index],A[pivot_index] = A[pivot_index],A[mid_index]
  64. return mid_index
  65.  
  66. def quick_sort(A, start=0, end=None):
  67. if end is None:
  68. end = len(A)
  69. if start < end:
  70. mid = partition(A, start, end)
  71. quick_sort(A, start, mid)
  72. quick_sort(A, mid+1, end)
  73.  
  74. def counting_sort(str):
  75. counter = [ 0 for i in range(26) ]
  76. result = [char for char in str]
  77.  
  78. for char in str:
  79. char_index = ord(char)-ord('a')
  80. counter[char_index] += 1
  81.  
  82. for i in range(1, len(counter)):
  83. counter[i] += counter[i-1]
  84.  
  85. for char in reversed(str):
  86. char_index = ord(char)-ord('a')
  87. result[counter[char_index]-1] = char
  88. counter[char_index] -= 1
  89.  
  90. return ''.join(result)
  91.  
  92. if __name__ == "__main__":
  93. A = [ 1, 4, 2, 3, 9, 8, 7, 16, 14, 10 ]
  94.  
  95. #insertion_sort(A)
  96. #print("After insertion_sort: {}".format(A))
  97.  
  98. #print("merge_sort: {}".format(merge_sort(A)))
  99. #print("After merge_sort: {}".format(A))
  100.  
  101. #my_heap_sort(A)
  102. #print("After my_heap_sort: {}".format(A))
  103.  
  104. quick_sort(A)
  105. print("After quick_sort: {}".format(A))
  106.  
  107. print("counting_sort: {}".format(counting_sort("traceback")))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement