什么是洗牌算法?

在php中,有函数 shufle($arr);  可以直接打乱数组.而有些语言是没有现成的函数的.

那么可以自己写一个洗牌算法:

第一步:取一个随机数, 最小值和最大值分别为 1和数组的成员数(有的编程语言是从0开始有的语言是从1开始)

第二步:根据这个随机数从成员中提取一个成员.放到一个新的数组中

第三步:从原始数组中删除这个成员.再重复第一步

易语言代码:(如果是其他语言的话就没这么麻烦,因为易语言的参数必须指定数据类型.所以只能分别传参数了)

QQ截图20200520063343.jpg

.版本 2

.子程序 数组_打乱_洗牌算法, 整数型, , 返回数组成员数
.参数 要打乱的文本数组, 文本型, 参考 可空 数组
.参数 要打乱的整数数组, 整数型, 参考 可空 数组
.局部变量 a, 整数型
.局部变量 随机数, 整数型
.局部变量 i, 整数型
.局部变量 新数组整数型, 整数型, , "0"
.局部变量 新数组文本型, 文本型, , "0"

.如果真 (取反 (是否为空 (要打乱的整数数组)))
    a = 取数组成员数 (要打乱的整数数组)
    .计次循环首 (a, i)
        随机数 = 取随机数 (1, a - i + 1)
        加入成员 (新数组整数型, 要打乱的整数数组 [随机数])
        删除成员 (要打乱的整数数组, 随机数, )
    .计次循环尾 ()
    要打乱的整数数组 = 新数组整数型

.如果真结束

.如果真 (取反 (是否为空 (要打乱的文本数组)))
    a = 取数组成员数 (要打乱的文本数组)
    .计次循环首 (a, i)
        随机数 = 取随机数 (1, a - i + 1)
        加入成员 (新数组文本型, 要打乱的文本数组 [随机数])
        删除成员 (要打乱的文本数组, 随机数, )
    .计次循环尾 ()
    要打乱的文本数组 = 新数组文本型
.如果真结束

返回 (a)