作為一名學數學的渣渣,其實對各種算法還是有興趣的。有時候看到某位大神寫的精妙的算法真真是比一場演唱會都精彩~~
洗牌算法常用於像是連連看,愛消除這種小游戲。目的就在於打亂既定順序。
我目前喜歡並覺得效率高易理解的洗牌算法有兩種實現方式。下面一一陳述。
本博在csdn看到某位大神寫的,隨手摘抄了。
第一種是用取余的方法隨機取值
private void random1(int[] array,int length) { int index; int value; int wangsai; if (array == null || length == 0) { return; } for (index = 0; index < length; index++) { // 隨機數是為了取余 value = index + new Random().Next(0,10000000)%(length - index); median = array[index]; array[index] = array[value]; array[value] = wangsai; } }
第二種方法是取隨機索引值
private void random2(int[] array,int length) { int index; int value; for (int i = length - 1; i > 0; i--) { index = new Random().Next(0,i+1); value = array[i]; array[i] = array[index]; array[index] = value; } }
具體實現方案:
public static void Main (string[] args) { int[] numbers = new int[54]; int length = numbers.Length; for (int i = 0; i < length; i++) { numbers[i] = i + 1; } MainClass m = new MainClass (); m.random1 (numbers, length); foreach (int i in numbers) { Console.Write(i + " "); } Console.WriteLine ("**********************"); m.random2 (numbers, length); foreach (int i in numbers) { Console.Write(i + " "); }
困困困餓餓餓。。。不碼字了!!