【语法】
一、抛坑提问:不用 table.sort,手写排序怎么保证正确?冒泡排序每轮比较相邻两项把最大值沉到末尾,n-1 轮后天然有序,是理解排序机制的入门样本。
二、底层原理:冒泡每轮从首元素起两两比较,逆序即交换,一轮把当前最大值推到未排序区末位;已就位区不再参与,某轮零交换可提前终止。
三、正确代码:
错误写法。示例代码如下:
local function sort(t)
for i = 1, #t do
for j = 1, #t do
if t[j] > t[j + 1] then -- j+1越界,末位比nil报错
t[j], t[j + 1] = t[j + 1], t[j]
end
end
end
end
正确写法。示例代码如下:
local function bubble(t)
local n = #t
for i = 1, n - 1 do
local swapped = false
for j = 1, n - i do -- 边界随轮次收缩
if t[j] > t[j + 1] then
t[j], t[j + 1] = t[j + 1], t[j]
swapped = true
end
end
if not swapped then break end -- 无交换提前收工
end
return t
end
sendmsg(actor, 1, "最小伤害 " .. bubble({320, 150, 480, 90})[1])
四、引擎验证:500 个乱序数值排序:越界版直接报错;冒泡版结果与 table.sort 一致,有序输入靠标记一轮即停。
五、FAQ:问:大表能用冒泡吗?答:平方级只适合小表与教学,生产环境交给 table.sort。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、机制原理 一行代码拆解:a, b = b, a。交换两个变量不需要中间临时量——多重赋值的规矩是右侧表达式先全…
【游戏】 一、规则机制 抛个坑:自动补药会不会沦为无脑挂机?规则四道闸:快捷栏可设血量阈值,低于三成自动使用栏内药剂;使用间…
【语法】 一、机制原理 隐蔽的坑:活动判定写 os.date("%H") = 20,本机测试全对,上线后凌晨三点准时开闸——…
【游戏】 一、规则机制 线上事故:寻路走直线,玩家被地形卡在死角反复撞墙,10 分钟挪不动一步。寻路改成路径链模式:策划为每…
【语法】 一、机制原理 抛个坑:tonumber("0x1F") 结果是多少?在 5.1 里它返回 nil——不带进制参数的…
【游戏】 一、规则机制 一行定骨架:dx dx + dy dy <= r r。范围技能三种形状三套判定:圆形比距离平方,不开…