复制
收藏
提问
简洁
写个排序函数lua
2月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
Lua 提供了多种排序方法,其中 table.sort
是最常用的排序函数。以下是一些基本的 Lua 排序函数示例:
基本的 table.sort
使用
table.sort
是 Lua 中用于对数组进行排序的函数。它接受一个数组和一个可选的比较函数作为参数。如果没有提供比较函数,它将按照数字或字母顺序进行排序。
local arr = {5, 2, 9, 1, 5, 6}
table.sort(arr)
-- arr 现在是 {1, 2, 5, 5, 6, 9}
自定义比较函数
你可以提供一个自定义的比较函数来控制排序的顺序。这个函数接受两个参数,如果第一个参数应该排在第二个之前,返回 true。
local function compare(a, b)
return a < b
end
local arr = {5, 2, 9, 1}
table.sort(arr, compare)
-- arr 现在是 {1, 2, 5, 9}
选择排序
选择排序是一种简单的排序算法,它重复地从待排序的元素中找到最小(或最大)的元素,然后放到已排序序列的末尾。
local 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
end
local arr = {4, 2, 6, 3, 5}
selectionSort(arr)
-- arr 现在是 {2, 3, 4, 5, 6}
快速排序
快速排序是一种分而治之的排序算法,它使用一个分界值(pivot)将数组分为两部分,然后递归地对这两部分进行排序。
local function quickSort(arr, low, high)
if low < high then
local pi = partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
end
end
local 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
local arr = {10, 7, 8, 9, 1, 5}
quickSort(arr, 1, #arr)
-- arr 现在是 {1, 5, 7, 8, 9, 10}
这些示例展示了如何在 Lua 中实现基本的排序功能。你可以根据需要选择使用 table.sort
或者自己实现排序算法。12345678
你觉得结果怎么样?