注册 登录
编程论坛 C# 论坛

C#入门经典里面的洗牌

over1230 发布于 2014-12-22 16:46, 837 次点击
入门经典里面的洗牌代码:
for(int i=0;i<52;i++)
{
  int destCard=0;
  bool foundCard=false;
  while(foundCard==false)
  {
      destCard=sourceGen.Next(52);
      if(assigned[destCard]==false)
      {
          foundCard=true;
       }
   }
   assigned[destCard]=true;
   newDeck[destCard]=cards[i];
}
newDeck.CopyTo(cards,0);


而我喜欢这样洗牌:

for (int i = 0; i < 52; i++)
{
    temp = tempcard[i];
     int k = ran.Next(52);
      tempcard[i] = tempcard[k];
       tempcard[k] = temp;
 }

书上面 的洗牌方法,最好情况下是循环52次,而最坏情况下会运行:1+2+3+...+52次,
而我这种洗牌方法,只需要52次。
请教下,书上这样做的好处在那?我这种方法,有什么不好的地方呢?


[ 本帖最后由 over1230 于 2014-12-22 16:47 编辑 ]
2 回复
#2
xydddaxia2014-12-22 20:17
你写得比书上好,每次洗2张牌,书上每次洗一张牌
#3
over12302014-12-23 08:34
哦,那就好。
这也是很早之前听别人讲的一种思路,觉得很好,所以就习惯这种方式洗牌。
1