java - 用数组中最后元素覆盖随机抽取到的位置,这样的算法真的合适么?
怪我咯
怪我咯 2017-04-17 15:29:09
0
1
489
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(1)
Ty80

這是一個數組內部取隨機值後換位置的演算法,每次取數組中的隨機數後,把這個隨機數與數組尾部的值換位,這樣取過的值全部移動到數組尾部,而新的隨機值會在0和n-1之間,也就是從頭部到最後一個未換位的位置之間取,因此不會有重複值出現.
比如:
numbers = [0,1,2,3,4,5],
假如r=2,則取出一個隨機值numbers[2] ,也就是數字2,
然後進行換位,numbers[r] = numbers[n - 1],2被換到數組最後一位,數組此時變成:
[0,1,5,3,4,2],
此時5換到了前面,這時n--後,再次取隨機值時是從[0,1,5,3,4,2]中取了(加粗部分),所以新的隨機值必定不會包含已經取出的2.
同理,再次取值時,這個值會放到倒數第二位.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!