【发布时间】:2016-08-17 15:44:02
【问题描述】:
Quicksort 据说是用于在列表/表格/任何内容中对数据进行排序的最快速算法之一。反正这个算法的rosettacode Lua实现是怎么来的
function quicksort(t)
if #t < 2 then return t end
local pivot = t[1]
local a, b, c={}, {}, {}
for _, v in ipairs(t) do
if v < pivot then a[#a + 1] = v
elseif v > pivot then c[#c + 1] = v
else b[#b + 1] = v
end
end
a = quicksort(a)
c = quicksort(c)
for _, v in ipairs(b) do a[#a + 1] = v end
for _, v in ipairs(c) do a[#a + 1] = v end
return a
end
与内置的table.sort(table) 算法相比,速度要慢得多(大约需要一分钟才能对一百万个条目表中的所有随机放置的条目进行排序),而对同一个表进行排序只需要大约五秒钟?
【问题讨论】:
-
Lua 是解释型语言,解释成本高。与本机代码进行比较时,至少尝试使用 LuaJIT 进行相同的测试。
-
快速排序在最佳和平均情况下为 O(n log n),但在最坏情况下为 O(n ^ 2)。并不总是最快速的算法。
-
@Akshat Mahajan 不过,这并不能解释效率的多少损失,如果我以另一个顺序重新创建表,我会得到大致相同的结果。
-
@Vlad JIT 编译器有什么变化?
-
用C写,会更快。
标签: sorting lua quicksort lua-table rosetta-code