CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧语法算法996引擎

Lua逆序对:归并排序顺带的交换计数

2026-09-27 01:15 作者:996 技术组 996引擎Lua教程传奇脚本高级技巧语法算法996引擎

【语法】
一、隐蔽陷阱
想知道一份乱序榜单有多乱:任意两笔的先后颠倒了几对?两两比对是 n² 次,5000 条要 1250 万次——排序本来就要做,这个计数能不能搭车完成?
二、底层原理
归并排序在两半各自有序后合并,当后半的元素先于前半剩余元素被搬走时,它与前半剩下的每一个元素各构成一个逆序对。在搬运瞬间累加计数即可,排序整体 O(n log n),逆序对顺路白得。
三、正确代码
基础写法(归并合并中计数):

lua
local function mergeCount(a, tmp, lo, mid, hi)
    local i, j, k, cnt = lo, mid + 1, lo, 0
    while i <= mid and j <= hi do
        if a[i] <= a[j] then
            tmp[k] = a[i]; i = i + 1
        else
            cnt = cnt + mid - i + 1
            tmp[k] = a[j]; j = j + 1
        end
        k = k + 1
    end
    while i <= mid do tmp[k] = a[i]; i = i + 1; k = k + 1 end
    while j <= hi do tmp[k] = a[j]; j = j + 1; k = k + 1 end
    for t = lo, hi do a[t] = tmp[t] end
    return cnt
end

进阶写法(递归统计入口):

lua
local function countInv(a, tmp, lo, hi)
    if lo >= hi then return 0 end
    local mid = math.floor((lo + hi) / 2)
    return countInv(a, tmp, lo, mid)
        + countInv(a, tmp, mid + 1, hi)
        + mergeCount(a, tmp, lo, mid, hi)
end
local p = getplayerbyname("rank01")
sendmsg(p, 1, "逆序对 "
    .. countInv({3, 1, 2}, {}, 1, 3) .. " 对")

四、引擎验证
{3,1,2} 数出 2 对(3 压住 1 与 2);5000 条乱序数据从 1250 万次比对降到约 6 万步,降幅约 200 倍。
五、FAQ
问:相等元素算逆序吗?
答:不算,比较用小于等于,结果稳定。
问:计数会溢出吗?
答:10 万条上限约 50 亿对,双精度内安全。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

进阶实战语法算法

Lua表连接:按键关联的两表合并

【语法】 一、机制原理 一行代码拆解:local extra = index[main[key]] or {}。两张表按共同…

2026-09-27 21:43 996 技术组
进阶实战游戏功能

边缘吸附:拖拽窗口的贴边停靠

【游戏】 一、规则机制 隐蔽的坑:拖拽小窗松手位置随缘,有的只剩一半挂在屏幕外,再也拉不回来。边缘吸附补上收尾:松手时窗口落…

2026-09-27 21:43 996 技术组
入门夯实游戏功能

发送防重:重复消息的间隔拦截

【游戏】 一、规则机制 一行代码拆解:if text == lastText and now - lastAt < 5 th…

2026-09-27 21:43 996 技术组
进阶实战语法算法

Lua插值查找:均匀分布的进阶查找

【语法】 一、机制原理 抛坑提问:二分查找在均匀分布的有序数组上,还能再快吗?插值查找把对半改成按比例估位:目标值在区间里处…

2026-09-27 21:43 996 技术组
进阶实战游戏功能

新手遮罩:首次进入的指引高亮

【游戏】 一、规则机制 线上事故:新手第一次进主界面面对满屏按钮无所适从,客诉清一色"不知道先点哪"。新手遮罩的流程:首次进…

2026-09-27 21:43 996 技术组
进阶实战游戏功能

装备评分:综合评分的展示规则

【游戏】 一、规则机制 抛个坑:装备好坏要看攻击、气血、抗性一堆属性,太费劲——综合评分怎么算才服众?评分规则:各属性按配置…

2026-09-27 21:43 996 技术组