洗牌算法java
1.Fisher-Yates Shuffle
? ? // 從所有排列表中第i張后面的牌中隨機選出一張作為前牌中的第i張
? ? // 改變了牌列表的順序
? ? public void FYShuffle(int size)
? ? {
? ? ? ? int tempInd;
? ? ? ? for(int i = 0; i < size; i++)
? ? ? ? {
? ? ? ? ? ? tempInd = i + rdm.nextInt(size - i);// 獲得i后的隨機數
? ? ? ? ? ? curList[i] = new Card(cardList[tempInd]);// 將選出后的牌賦給curList[i]
? ? ? ? ? ? this.swap(cardList[i], cardList[tempInd]);// 將選出后的牌放在cardList[i]
? ? ? ? }
? ? }
2.Knuth-Durstenfeld Shuffle
? ? // 將前面的i張牌中隨機選出一張和第i張交換位置
? ? // 節省了空間
? ? public void KDShuffle(int size)
? ? {
? ? ? ? int tempind;
? ? ? ? this.setCurList(this.getCardList());
? ? ? ? for(int i = size - 1; i > 0; i--)
? ? ? ? {
? ? ? ? ? ? tempind = rdm.nextInt(i);
? ? ? ? ? ? this.swap(curList[i], curList[tempind]);
? ? ? ? }
? ? }
3.Inside-Out Algorithm
? ? // 在前面的i-1張牌中隨機選出一張和第i張牌交換。
? ? public void IOShuffle(int size)
? ? {
? ? ? ? int tempInd;
? ? ? ? this.setCurList(this.getCardList());
? ? ? ? for(int i = 1; i < size; i++)
? ? ? ? {
? ? ? ? ? ? tempInd = rdm.nextInt(i);
? ? ? ? ? ? // curList[tempInd] = curList[i];
? ? ? ? ? ? // curList[i] = cardList[tempInd];
? ? ? ? ? ? this.swap(curList[i], curList[tempInd]);
? ? ? ? }
? ? }
原文在這里:點擊打開鏈接
總結
- 上一篇: vep加密视频破解转换翻录为mp4教程
- 下一篇: 基于python实现的双月模型