📅  最后修改于: 2023-12-03 15:17:27.540000             🧑  作者: Mango
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中的实现。除此之外,还有许多其他排序算法可供选择,例如希尔排序、归并排序等。不同的排序算法有着不同的时间复杂度和空间复杂度,开发者需要根据实际情况选择最适合的算法。