Advertisement
KingAesthetic

Python Example 3

Aug 12th, 2024 (edited)
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.80 KB | None | 0 0
  1. import random
  2. import time
  3.  
  4. # Kaizer here. I implemented and compared different sorting algorithms using 3 main ones. quicksort, mergesort, and heapsort, in terms of performance.
  5. # function to print an array
  6. def print_array(arr):
  7.     print(*arr)
  8.  
  9. # quicksort implementation
  10. def partition(arr, low, high):
  11.     pivot = arr[high]
  12.     i = low - 1
  13.     for j in range(low, high):
  14.         if arr[j] < pivot:
  15.             i += 1
  16.             arr[i], arr[j] = arr[j], arr[i]
  17.     arr[i + 1], arr[high] = arr[high], arr[i + 1]
  18.     return i + 1
  19.  
  20. def quicksort(arr, low, high):
  21.     if low < high:
  22.         pi = partition(arr, low, high)
  23.         quicksort(arr, low, pi - 1)
  24.         quicksort(arr, pi + 1, high)
  25.  
  26. # mergesort implementation
  27. def merge(arr, left, mid, right):
  28.     n1 = mid - left + 1
  29.     n2 = right - mid
  30.  
  31.     L = arr[left:left+n1]
  32.     R = arr[mid+1:mid+1+n2]
  33.  
  34.     i = j = 0
  35.     k = left
  36.  
  37.     while i < n1 and j < n2:
  38.         if L[i] <= R[j]:
  39.             arr[k] = L[i]
  40.             i += 1
  41.         else:
  42.             arr[k] = R[j]
  43.             j += 1
  44.         k += 1
  45.  
  46.     while i < n1:
  47.         arr[k] = L[i]
  48.         i += 1
  49.         k += 1
  50.  
  51.     while j < n2:
  52.         arr[k] = R[j]
  53.         j += 1
  54.         k += 1
  55.  
  56. def mergesort(arr, left, right):
  57.     if left < right:
  58.         mid = (left + right) // 2
  59.         mergesort(arr, left, mid)
  60.         mergesort(arr, mid + 1, right)
  61.         merge(arr, left, mid, right)
  62.  
  63. # heapsort implementation
  64. def heapify(arr, n, i):
  65.     largest = i
  66.     left = 2 * i + 1
  67.     right = 2 * i + 2
  68.  
  69.     if left < n and arr[left] > arr[largest]:
  70.         largest = left
  71.  
  72.     if right < n and arr[right] > arr[largest]:
  73.         largest = right
  74.  
  75.     if largest != i:
  76.         arr[i], arr[largest] = arr[largest], arr[i]
  77.         heapify(arr, n, largest)
  78.  
  79. def heapsort(arr):
  80.     n = len(arr)
  81.     for i in range(n // 2 - 1, -1, -1):
  82.         heapify(arr, n, i)
  83.  
  84.     for i in range(n - 1, 0, -1):
  85.         arr[0], arr[i] = arr[i], arr[0]
  86.         heapify(arr, i, 0)
  87.  
  88. # function to measure and compare sorting times
  89. def compare_sorts(arr):
  90.     arr1 = arr.copy()
  91.     arr2 = arr.copy()
  92.     arr3 = arr.copy()
  93.  
  94.     start = time.time()
  95.     quicksort(arr1, 0, len(arr1) - 1)
  96.     end = time.time()
  97.     quicksort_time = end - start
  98.     print(f"Quicksort time: {quicksort_time:.6f} seconds")
  99.  
  100.     start = time.time()
  101.     mergesort(arr2, 0, len(arr2) - 1)
  102.     end = time.time()
  103.     mergesort_time = end - start
  104.     print(f"Mergesort time: {mergesort_time:.6f} seconds")
  105.  
  106.     start = time.time()
  107.     heapsort(arr3)
  108.     end = time.time()
  109.     heapsort_time = end - start
  110.     print(f"Heapsort time: {heapsort_time:.6f} seconds")
  111.  
  112. if __name__ == "__main__":
  113.     arr = [12, 11, 13, 5, 6, 7]
  114.     print("Original array:", end=" ")
  115.     print_array(arr)
  116.  
  117.     compare_sorts(arr)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement