C#实现洗牌算法
C#洗牌算法,简单演示!
算法一、
///<summary> ///洗牌算法 ///</summary> privatevoidtest() { int[]iCards=newint[54]; for(inti=0;i<iCards.Length;i++) { iCards[i]=i+1; } // Randomrand=newRandom(); intiTarget=0,iCardTemp=0; for(inti=0;i<iCards.Length;i++) { iTarget=rand.Next(0,iCards.Length); iCardTemp=iCards[i]; iCards[i]=iCards[iTarget]; iCards[iTarget]=iCardTemp; } for(inti=0;i<iCards.Length;i++) { Response.Write("第"+(i+1)+"张牌是:"+iCards[i]+"<br/>"); } }
算法二、
publicvoidShuffle() { int[]cards=newint[54]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53}; //创建一个临时的扑克牌组 int[]newCards=newCard[54]; //bool变量数组 bool[]assigned=newbool[54]; RandomsourceGen=newRandom(); for(inti=0;i<54;i++) { intdestCard=0;//随机数保存空间 boolfoundCard=false; while(foundCard==false) { //生成一个0到54之间的随机数 destCard=sourceGen.Next(54); if(assigned[destCard]==false) { foundCard=true; } } assigned[destCard]=true; newcards[destCard]=cards[i]; }
算法三、
publicvoidReshuffle() { int[]cards=newint[54]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53}; Randomram=newRandom(); intcurrentIndex; inttempValue; for(inti=0;i<54;i++) { currentIndex=ram.Next(0,54-i); tempValue=cards[currentIndex]; cards[currentIndex]=cards[53-i]; cards[53-i]=tempValue; } } 15
相比一下,第三个更简单,更高效!
以上就是本文给大家分享的洗牌算法的全部内容了,希望大家能够喜欢。