C# ----- 算法之洗牌算法
2015-12-08 16:46
363 查看
作为一名学数学的渣渣,其实对各种算法还是有兴趣的。有时候看到某位大神写的精妙的算法真真是比一场演唱会都精彩~~
洗牌算法常用于像是连连看,爱消除这种小游戏。目的就在于打乱既定顺序。
我目前喜欢并觉得效率高易理解的洗牌算法有两种实现方式。下面一一陈述。
本博在csdn看到某位大神写的,随手摘抄了。
第一种是用取余的方法随机取值
第二种方法是取随机索引值
具体实现方案:
困困困饿饿饿。。。不码字了!!
洗牌算法常用于像是连连看,爱消除这种小游戏。目的就在于打乱既定顺序。
我目前喜欢并觉得效率高易理解的洗牌算法有两种实现方式。下面一一陈述。
本博在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 + " "); }
困困困饿饿饿。。。不码字了!!
相关文章推荐
- C# ----- 数据类型(params/ref/out)
- c# 将dwg文件转化为pdf
- 学习调用WCF服务的各种方法
- 比如C#里面调用AutoCAD ActiveX API实现后台打印DWG文件为PDF文件
- C# commbox数据绑定
- C#操作Excel总结
- C# TimeSpan 计算时间差(时间间隔)
- HRESULT: 0x800A03EC Windows Server 2008 C# 导出 Excel
- C# ----- 接口(Interface)
- [总结]C#用于BMP图像显示的方法
- 12306奇葩验证码引发思考之C#实现验证码程序
- Convert string to binary and binary to string in C#
- C# 在word中查找及替换文本
- C# namespace 是什么
- C#文件下载
- C# 形参中有默认值
- C# 数据类型 值类型
- C#获取IP和整数IP方法
- C# 16进制与字符串、字节数组之间的转换(转)
- C#实现将文件转换为XML的方法