抽奖小程序抽奖算法的实现,附赠算法库
简易思路如下:
1、获取参与抽奖的人员列表,组合为数组
2、使用数组乱序算法,将抽奖列表大乱
3、根据一定规则取出打乱后的数组中的抽奖人员,这些就是中奖人员了
乱序算法思路具体如下,使用Fisher–Yates 洗牌算法:
Fisher–Yates 算法由Fisher和Yates这两个人的发明的,一开始只是用来人工混排(真实荷官,现场发牌……)一组数字序列,原始算法的步骤非常容易理解。
- 写下从 1 到 N 的数字(一副扑克)
- 取一个从 1 到剩下的数字(包括这个数字)的随机数 k——(从中间抽一沓,)
- 从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最前面一位
- 重复第 2 步,直到所有的数字都被取出
- 第 3 步写出的这个序列,现在就是原始数字的随机排列
说通俗点就是:
- 一副扑克
- 从中间随便取一沓(取的越少,越容易实现乱序,算法中只取一个)
- 把取出的牌放在旁边,堆成一堆
- 重复2、3步骤,直到手里没牌
- 第三步开始另外堆起来的牌,就足够乱了
算法库地址如下,需要自取: