brianb

来源:互联网 发布:最终幻想14优化 编辑:程序博客网 时间:2024/06/11 11:30

三个常见的思路
(1)生成一个包含这个范围(假设范围是2-6)的数组,内容是连续序数。比如 [2,3,4,5,6]
再生成一个和它相同长度,但是里面存随机数的数组,比如[432,541,406,67,190] (实际上随机数的范围可以是1~2^31-1)
对这个数组排序,并且按照原来的顺序得到原始下标,比如排序后[67,190,406,432,541],对应原来下标是[3,4,2,0,1]也就是原来67下标是3,现在第一个元素就是3,别的类似。
最后,用这个打乱的下标,对你原始数据索引,比如3,那么就找到 [2,3,4,5,6] 的下标3的数字,也就是5,以此类推。得到[5,6,4,2,3]
[5,6,4,2,3]就是对[2,3,4,5,6]也就是你的范围打乱的结果,你要n个数,就从中依次取n个就可以了。
这个办法叫做洗牌算法,适合n和你的范围相同或者很接近的时候

原创粉丝点击