Advertisement
KingAesthetic

LuaExample3

Sep 29th, 2024 (edited)
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.30 KB | None | 0 0
  1. -- Hi Vanessa Here. I implemented and compared different sorting algorithms using 3 main ones. quicksort, mergesort, and heapsort, in terms of performance.
  2. -- array
  3. local function printArray(arr)
  4.     for _, num in ipairs(arr) do
  5.         io.write(num .. " ")
  6.     end
  7.     print()
  8. end
  9.  
  10. -- quicksort implementation
  11. local function partition(arr, low, high)
  12.     local pivot = arr[high]
  13.     local i = low - 1
  14.     for j = low, high - 1 do
  15.         if arr[j] < pivot then
  16.             i = i + 1
  17.             arr[i], arr[j] = arr[j], arr[i]
  18.         end
  19.     end
  20.     arr[i + 1], arr[high] = arr[high], arr[i + 1]
  21.     return i + 1
  22. end
  23.  
  24. local function quicksort(arr, low, high)
  25.     if low < high then
  26.         local pi = partition(arr, low, high)
  27.         quicksort(arr, low, pi - 1)
  28.         quicksort(arr, pi + 1, high)
  29.     end
  30. end
  31.  
  32. -- mergesort implementation
  33. local function merge(arr, left, mid, right)
  34.     local n1 = mid - left + 1
  35.     local n2 = right - mid
  36.     local L, R = {}, {}
  37.  
  38.     for i = 1, n1 do
  39.         L[i] = arr[left + i - 1]
  40.     end
  41.     for j = 1, n2 do
  42.         R[j] = arr[mid + j]
  43.     end
  44.  
  45.     local i, j, k = 1, 1, left
  46.     while i <= n1 and j <= n2 do
  47.         if L[i] <= R[j] then
  48.             arr[k] = L[i]
  49.             i = i + 1
  50.         else
  51.             arr[k] = R[j]
  52.             j = j + 1
  53.         end
  54.         k = k + 1
  55.     end
  56.  
  57.     while i <= n1 do
  58.         arr[k] = L[i]
  59.         i = i + 1
  60.         k = k + 1
  61.     end
  62.  
  63.     while j <= n2 do
  64.         arr[k] = R[j]
  65.         j = j + 1
  66.         k = k + 1
  67.     end
  68. end
  69.  
  70. local function mergesort(arr, left, right)
  71.     if left < right then
  72.         local mid = left + math.floor((right - left) / 2)
  73.         mergesort(arr, left, mid)
  74.         mergesort(arr, mid + 1, right)
  75.         merge(arr, left, mid, right)
  76.     end
  77. end
  78.  
  79. -- heapsort implementation
  80. local function heapify(arr, n, i)
  81.     local largest = i
  82.     local left = 2 * i + 1
  83.     local right = 2 * i + 2
  84.  
  85.     if left < n and arr[left + 1] > arr[largest + 1] then
  86.         largest = left
  87.     end
  88.  
  89.     if right < n and arr[right + 1] > arr[largest + 1] then
  90.         largest = right
  91.     end
  92.  
  93.     if largest ~= i then
  94.         arr[i + 1], arr[largest + 1] = arr[largest + 1], arr[i + 1]
  95.         heapify(arr, n, largest)
  96.     end
  97. end
  98.  
  99. local function heapsort(arr)
  100.     local n = #arr
  101.     for i = math.floor(n / 2) - 1, 0, -1 do
  102.         heapify(arr, n, i)
  103.     end
  104.  
  105.     for i = n - 1, 1, -1 do
  106.         arr[1], arr[i + 1] = arr[i + 1], arr[1]
  107.         heapify(arr, i, 0)
  108.     end
  109. end
  110.  
  111. -- function to measure and compare sorting times
  112. local function compareSorts(arr)
  113.     local arr1 = {table.unpack(arr)}
  114.     local arr2 = {table.unpack(arr)}
  115.     local arr3 = {table.unpack(arr)}
  116.  
  117.     local start = os.clock()
  118.     quicksort(arr1, 1, #arr1)
  119.     local quicksortTime = os.clock() - start
  120.     print("Quicksort time: " .. quicksortTime .. " seconds")
  121.  
  122.     start = os.clock()
  123.     mergesort(arr2, 1, #arr2)
  124.     local mergesortTime = os.clock() - start
  125.     print("Mergesort time: " .. mergesortTime .. " seconds")
  126.  
  127.     start = os.clock()
  128.     heapsort(arr3)
  129.     local heapsortTime = os.clock() - start
  130.     print("Heapsort time: " .. heapsortTime .. " seconds")
  131. end
  132.  
  133. -- main function
  134. local arr = {12, 11, 13, 5, 6, 7}
  135. print("Original array: ")
  136. printArray(arr)
  137.  
  138. compareSorts(arr)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement