lua 实现基本排序算法

冒泡排序

算法通过嵌套的循环比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。重复进行这个过程,直到没有任何一对相邻元素需要交换为止。
越后面越大
越后面越大,小的放前面,大的放后面

function BubbleSort(arr)
	local count = #arr
    for i=1,count-1 do
        for j=1 , count - i do
            if arr[j] > arr[j+1] then
                arr[j],arr[j+1]=arr[j+1],arr[j]
            end
        end
    end
end

--test
local arr = {
    
    3, 9, 4, 7, 2, 0, 1, 8, 6, 5}
BubbleSort(arr)
for i, v in ipairs(arr) do
  print(v)
end

在这里插入图片描述

快速排序

该算法通过递归地将数组分成更小的子数组,并对每个子数组调用 partition() 函数。partition() 函数选择数组中最后一个元素作为枢纽元,并将数组分成两个部分,一部分包含所有小于等于枢纽元的元素,一部分包含所有大于枢纽元的元素。最后返回枢纽元在排序后的数组中的位置。

function quick_sort(arr, low, high)
  if not low then low = 1 end
  if not high then high = #arr end

  if low < high then
    local p = partition(arr, low, high)
    quick_sort(arr, low, p - 1)
    quick_sort(arr, p + 1, high)
  end
end

function partition(arr, low, high)
  local pivot = arr[high]
  local i = low - 1

  for j = low, high - 1 do
    if arr[j] <= pivot then
      i = i + 1
      arr[i], arr[j] = arr[j], arr[i]
    end
  end

  arr[i + 1], arr[high] = arr[high], arr[i + 1]
  return i + 1
end

--test
local arr = {
    
    3, 9, 4, 7, 2, 0, 1, 8, 6, 5}
quick_sort(arr)
for i, v in ipairs(arr) do
  print(v)
end

猜你喜欢

转载自blog.csdn.net/Brave_boy666/article/details/129898439