您的位置:首页 > 编程语言 > C#

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

2015-12-08 16:46 363 查看
作为一名学数学的渣渣,其实对各种算法还是有兴趣的。有时候看到某位大神写的精妙的算法真真是比一场演唱会都精彩~~

洗牌算法常用于像是连连看,爱消除这种小游戏。目的就在于打乱既定顺序。

我目前喜欢并觉得效率高易理解的洗牌算法有两种实现方式。下面一一陈述。

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


困困困饿饿饿。。。不码字了!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: