原帖地址: https://blog.csdn.net/noetic_wxb/article/details/80748113
要求传入两个相同的数时要返回false, 换句话说,下面的函数用<=做比较,是错误的。
local compare_func = function(v1, v2)
return v1 <= v2 -- error
end
测试
local t = {4,3,2,1}
table.sort(t,compare_func)
for k, v in ipairs(t) do
print(v)
end
输出:1,2,4,3
为什么了?
因为内部使用sheel sort算法,具体细节不表。 在上面的例子中,算法运行中会调用compare_func (3,3),返回true,不满足相同元素返回false的要求。算法执行错误。
比较函数写<,不要写<=
local compare_func = function(v1, v2)
if v1[1] == v2[1] then
return v1[2] >= v2[2]
else
return v1[1] > v2[1]
end
end
local t = {{1,1},{1,1},{2,2},{3,3}}
table.sort(t,compare_func)
for k, v in ipairs(t) do
print(v[1], v[2])
end