准备工作
是参考这里,根据自己理解写的lua版,若有问题或者更好方案,可以留言讨论哦!
时间复杂度从小到大: 冒泡(O(n2))–>选择(O(n2))–>插入(O(n2))–>快速(O(nlogn))–>希尔(分段,O(n1.5))–>堆排序(O(n))
- 打印表数
-- 打印表数据
local function printTable(arg)
if arg == nil then
print("输入表为空")
return
end
if type(arg) ~= "table" then
print(arg)
return
end
local t = "{"
for k, v in pairs(arg) do
t = t .. v .. ","
end
print(t .. "}")
end
- 数组数据交换
-- 数组i,j位置交换数据
local function Swap(tab,i,j,isPrint)
local length = #tab
if i == j or i < 1 or j < 1 or j > length or i > length then
return
end
local temp = tab[i]
tab[i] = tab[j]
tab[j] = temp
if isPrint ~= nil then
printTable(arr)
end
end
- 准备数据
-- 准备相同的数组
local arr0 = {
2,5,3,6,7,1,4,8,0,9}
local arr1 = {
2,5,3,6,7,1,4,8,0,9}
local arr2 = {
2,5,3,6,7,1,4,8,0,9}
local arr3 = {
2,5,3,6,7,1,4,8,0,9}
local arr4 = {
2,5,3,6,7,1,4,8,0,9}
local arr5 = {
2,5,3,6,7,1,4,8,0,9}
- table数据翻转(补充)
下了实现的排序方法默认是升序的,为了降序加了参数isDes,可以利用这个翻转函数,但是为了练手自己又写了降序的方法,自行参考
-- table数据翻转
function ReverseTable(tab)
local length = #tab
if length < 1 then
return
end
local start = 1
while start < length do
Swap(tab,start,length)
start = start + 1
length = length - 1
end
end
冒泡排序
- 思路
两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止 - 排序方法
-- 冒泡排序: isDes是否为降序
fu

本文详细介绍并实现了多种排序算法的Lua版本,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序等,并对每种算法的时间复杂度进行了对比。
最低0.47元/天 解锁文章
804

被折叠的 条评论
为什么被折叠?



