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
相比一下,第三个更简单,更高效!
以上就是本文给大家分享的洗牌算法的全部内容了,希望大家能够喜欢。