C# ----- 算法之洗牌算法


作為一名學數學的渣渣,其實對各種算法還是有興趣的。有時候看到某位大神寫的精妙的算法真真是比一場演唱會都精彩~~

洗牌算法常用於像是連連看,愛消除這種小游戲。目的就在於打亂既定順序。

我目前喜歡並覺得效率高易理解的洗牌算法有兩種實現方式。下面一一陳述。

本博在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 + " ");
               }

 

 

困困困餓餓餓。。。不碼字了!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM