cKnuth-Durstenfeld Shuffle(复杂度(n)
-- 设置随机数种子
math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6)))
-- 洗牌算法
function shuffle(targetTbl)
local tblLen = #targetTbl
while(tblLen > 0)
do
local idx = math.random(tblLen)
local temp = targetTbl[idx]
targetTbl[idx] = targetTbl[tblLen]
targetTbl[tblLen] = temp
tblLen = tblLen - 1
end
return targetTbl
end
-- test
local testTbl = {1, 2, 3, 4, 5, 6, 7, 8, 9}
local retTbl = shuffle(testTbl)
for k, v in pairs(retTbl) do
print(k, v)
end