洗牌算法的要求是这样的:将普通个数乱序后输出。由于和扑克牌的洗牌过程比较相似所以我也就称为洗牌算法了。很多地方都不自觉的需要这个算法的支持。也可以将这个算法扩展为从普通个数中取出M个不重复的数(0M=N).今天我们看下如何用C#来实现
C#洗牌算法,简单演示!
算法一、
///摘要
///洗牌算法
////摘要
私有空的测试()
{
int[]iCards=new int[54];
for(int I=0;我爱卡兹。长度;我)
{
icards[I]=I ^ 1;
}
//
Random rand=new Random();
int iTarget=0,iCardTemp=0;
for(int I=0;我爱卡兹。长度;我)
{
iTarget=兰特。接下来(0,iCards .长度);
iCardTemp=iCards[I];
iCards[I]=iCards[iTarget];
iCards[iTarget]=iCardTemp;
}
for(int I=0;我爱卡兹。长度;我)
{
回应。写('第我1 '张牌是:' iCards[I]' br/');
}
}
算法二、
公共无效洗牌()
{
int[] cards=new int[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
//创建一个临时的扑克牌组
int[] newCards=新卡片[54];
//bool变量数组
bool[]assigned=new bool[54];
随机源gen=new Random();
for(int I=0;i 54我)
{
int dest card=0;//随机数保存空间
bool foundCard=false
while (foundCard==false)
{
//生成一个0到54之间的随机数
destCard=sourceGen .下一个(54);
如果(赋值[destCard]==false)
{
foundCard=true
}
}
赋值[目的卡]=真;
新卡[destCard]=卡[I];
}
算法三、
公共无效重新洗牌()
{
int[] cards=new int[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
Random ram=new Random();
国际货币指数
int临时值
for(int I=0;i 54我)
{
currentIndex=ram .下一个(0,54-I);
临时值=卡片[当前索引];
卡片[currentIndex]=卡片[53-I];
卡片[53 - i]=临时值;
}
}
15
相比一下,第三个更简单,更高效!
以上就是本文给大家分享的洗牌算法的全部内容了,希望大家能够喜欢。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。