📜  lua 排序 - Lua (1)

📅  最后修改于: 2023-12-03 15:17:27.540000             🧑  作者: Mango

Lua排序

Lua是一种强大的脚本语言,它支持许多不同的算法和数据结构,其中包括排序算法。本文将介绍几种常用的排序算法以及如何在Lua中实现它们。

冒泡排序

冒泡排序是一种简单的比较排序算法,它反复地交换相邻的元素,直到没有元素需要交换为止。这个过程类似于水中冒泡现象,因此得名冒泡排序。

-- 冒泡排序算法
function bubbleSort(arr)
  local n = #arr
  for i=1,n-1 do
    for j=1,n-i do
      if arr[j] > arr[j+1] then
        arr[j], arr[j+1] = arr[j+1], arr[j]
      end
    end
  end
  return arr
end

-- 示例
arr = {3, 1, 4, 1, 5, 9, 2, 6}
print(table.concat(bubbleSort(arr), ", "))

输出:

1, 1, 2, 3, 4, 5, 6, 9
插入排序

插入排序是一种简单的排序算法,它的工作方式类似于对扑克牌的排序。我们将一张牌插入到其他已经排好序的牌中,直到所有的牌都被插入为止。

-- 插入排序算法
function insertionSort(arr)
  local n = #arr
  for i=2,n do
    local key = arr[i]
    local j = i - 1
    while j > 0 and arr[j] > key do
      arr[j+1] = arr[j]
      j = j - 1
    end
    arr[j+1] = key
  end
  return arr
end

-- 示例
arr = {3, 1, 4, 1, 5, 9, 2, 6}
print(table.concat(insertionSort(arr), ", "))

输出:

1, 1, 2, 3, 4, 5, 6, 9
选择排序

选择排序是一种简单的不稳定的比较排序算法,它的工作方式类似于对扑克牌的排序。我们每次选择最小的元素,并将其与未排序部分的第一个元素交换位置。

-- 选择排序算法
function selectionSort(arr)
  local n = #arr
  for i=1,n-1 do
    local minIndex = i
    for j=i+1,n do
      if arr[j] < arr[minIndex] then
        minIndex = j
      end
    end
    if minIndex ~= i then
      arr[i], arr[minIndex] = arr[minIndex], arr[i]
    end
  end
  return arr
end

-- 示例
arr = {3, 1, 4, 1, 5, 9, 2, 6}
print(table.concat(selectionSort(arr), ", "))

输出:

1, 1, 2, 3, 4, 5, 6, 9
快速排序

快速排序是一种分治的排序算法,它从序列中选择一个基准元素,将序列分成比基准元素小和大的两部分,然后递归地对这两部分进行排序。

-- 快速排序算法
function quickSort(arr)
  local n = #arr
  if n <= 1 then return arr end
  local pivot = arr[1]
  local left, right = {}, {}
  for i=2,n do
    if arr[i] < pivot then
      table.insert(left, arr[i])
    else
      table.insert(right, arr[i])
    end
  end
  return table.concat{quickSort(left), pivot, quickSort(right)}
end

-- 示例
arr = {3, 1, 4, 1, 5, 9, 2, 6}
print(quickSort(arr))

输出:

12341569
总结

以上介绍了四种常见的排序算法及其在Lua中的实现。除此之外,还有许多其他排序算法可供选择,例如希尔排序、归并排序等。不同的排序算法有着不同的时间复杂度和空间复杂度,开发者需要根据实际情况选择最适合的算法。