一页孤舟

学海无涯

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天看到了两个洗牌算法,用c#实现了下:

第一个:

 1    public void Shuffle()
 2        {
 3           
 4            int[] cards = new int[5401234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 };
 5            //创建一个临时的扑克牌组
 6            int[] newCards = new Card[54];
 7            //bool变量数组
 8            bool[] assigned = new bool[54];
 9
10            Random sourceGen = new Random();
11            for (int i = 0; i < 54; i++)
12            {
13                int destCard = 0;                    //随机数保存空间
14                bool foundCard = false;
15                while (foundCard == false)
16                {
17                    //生成一个0到54之间的随机数
18                    destCard = sourceGen.Next(54);
19                    if (assigned[destCard] == false)
20                    {
21                        foundCard = true;
22                    }

23                }

24                assigned[destCard] = true;
25                newcards[destCard] = cards[i];
26            }

 

第二个:

 1       public void Reshuffle()
 2        {
 3            int[] cards = new int[5401234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 };
 4            Random ram = new Random();
 5            int currentIndex;
 6            int tempValue;
 7            for (int i = 0; i < 54; i++)
 8            {
 9                currentIndex = ram.Next(054 - i);
10                tempValue = cards[currentIndex];
11                cards[currentIndex] = cards[53 - i];
12                cards[53 - i] = tempValue;
13            }

14        }

15

 

相比一下,第二个更简单,更高效!

 

posted on 2008-10-24 22:05  LinLi  阅读(4103)  评论(0编辑  收藏  举报