日期:2014-05-18  浏览次数:20867 次

关于dalmeeme的洗牌算法
C# code
 int[] numbers = new int[100];
        for (int i = 0; i < 100; i++)
            numbers[i] = i;
        Random rd = new Random();
        int index, realLength = numbers.Length, temp;
        for (int i = 0; i < 100; i++)
        {
            index = rd.Next(realLength);
            Response.Write(numbers[index] + "<br/>");
            temp = numbers[index];
            numbers[index] = numbers[realLength - 1];
            numbers[realLength - 1] = temp;
            realLength--;
        }




经过网友Arcan的提醒,我看了下他的算法实质是 for i:=1 to n do swap(a[i], a[random(i,n)]);
而并非for i:=1 to n do swap(a[i], a[random(1,n)]),只不过是倒着换的。
我没有看清楚算法就误认为他的解法有误,在此对他表示抱歉。

------解决方案--------------------
嗯,是这样的。
------解决方案--------------------
没事,他会理解的
------解决方案--------------------
我接受楼主的道歉。这次冲突我也有过错,在这里也为向楼主道歉。