好吧,被打脸了,首先承认自己孤陋寡闻。
wiki了一下,发现这是一个改进过的fisher kate shuffle算法:
The modern version of the Fisher–Yates shuffle, designed for computer use, was introduced by Richard Durstenfeld...
算法描述如下:


这确实是一个完美的、绝对等概率的洗牌算法。不过现实中不存在完美的洗牌,而且洗得越均匀越不容易出“大牌”,所以自己写应用是否要照抄需要权衡一下。
后头观察一下算法描述,它是0到n-1的数组(c语言表述法,下标从0开始),下行到1为止。转换为lua语言,应该是从#arr到2为止,而不是1。
所以,我依然要鄙视楼主的这个程序,抄都抄错!
最后
@霞虫