生成一定范围内的互不相同的随机数的方法比较
实现原理:
方法1:使用list,通过list.contains()作为循环判断的条件,实现无重复的add
方法2:使用两组数组,all存储所有可取值,result存储结果,result依次从all中取值,all长度递减,通过索引实现all中始终保持取完后剩下的元素
分析:法1在最坏情况下会重复循环,法2通过保证每次都能取到值,很大程度上提高了效率
代码比较:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics;namespace 基本语法 {class Program{static void Main(string[] args){Stopwatch watch = new Stopwatch();watch.Start();List<int> list = _GetRandom(20, 500, 400);watch.Stop();int ctrl = 0;foreach (int i in list){Console.Write("{0} ", i);++ctrl;if (ctrl % 20 == 0)Console.WriteLine();}Console.WriteLine("\nMethod 1 time used:{0}", watch.Elapsed);watch.Reset();watch.Start();int[] ia = GetRandom(20, 500, 400);watch.Stop();ctrl = 0;foreach (int i in ia){Console.Write("{0} ", i);++ctrl;if (ctrl % 20 == 0)Console.WriteLine();}Console.WriteLine("\nMethod 2 time used:{0}", watch.Elapsed);}/// <summary>/// 使用list容器产生一定范围内互不相同的随机数/// </summary>/// <param name="minVal">最小值</param>/// <param name="maxVal">最大值</param>/// <param name="amount">随机数总数</param>/// <returns>返回list<int></returns>static List<int> _GetRandom(int minVal, int maxVal, int amount){List<int> list = new List<int>();while (list.Count != amount){Random random = new Random((int)DateTime.Now.Ticks);int temp = random.Next(minVal, maxVal);if (!list.Contains(temp))list.Add(temp);}return list;}/// <summary>/// 使用数组方法实现/// </summary>/// <param name="minVal"></param>/// <param name="maxVal"></param>/// <param name="amout"></param>/// <returns>返回int[]</returns>static int[] GetRandom(int minVal, int maxVal, int amout){int[] result = new int[amout];int[] all = new int[maxVal-minVal+1];for (int ix = 0; ix!=amout;++ix ){all[ix] = minVal + ix;}Random random = new Random();int allNum = all.Length;for (int ix = 0; ix != amout;++ix ){int index=random.Next(allNum);result[ix] = all[index];all[index] = all[--allNum];}return result;}}}
运行结果:
方法1在很多情况下耗时根本无法接受。。。
转载于:https://www.cnblogs.com/leowww/archive/2013/05/20/3089715.html
生成一定范围内的互不相同的随机数的方法比较相关推荐
- python随机生成10个数_python得到一个10位随机数的方法及拓展
https://blog.csdn.net/qq_33324608/article/details/78866760 无意中看到一个写10位随机数的方法,很有想法,然后就从学了一下随机数,相关东西都记 ...
- 《JAVA练习题目7》 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数。(类PrimeGenerator都由类Main代替)
题目内容: 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数.要求PrimeGenerator类具有: 属性:start(区间起始值),end(区间终止值),两个属性均为 ...
- 只允许对象生成于堆内
只允许对象生成于堆内?怎么理解?肿么办? 我们已经知道,假如手头上有一个类Person,当你在程序中写下Person objTemp;时, 编译器悄悄地做了两件事:调用constructor构造对象o ...
- 如何在Java中生成特定范围内的随机整数?
如何生成特定范围内的随机int数值? 我已经尝试了以下方法,但是这些方法不起作用: 尝试1: randomNum = minimum + (int)(Math.random() * maximum); ...
- C/C++ 中生成特定范围内的随机数
大家在写 C/C++ 程序时,难免会遇到要求获取某个范围内的随机数,我查阅了一些资料后,总结如下.本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 ...
- python生成50个随机数_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- python从random生成列表_详解Python利用random生成一个列表内的随机数
详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...
- python产生随机数random.random_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- 在JavaScript中生成特定范围内的随机整数?
如何可以生成两个指定的变量之间的随机整数在JavaScript中,例如x = 4和y = 8将输出任何的4, 5, 6, 7, 8 ? #1楼 对于具有范围的随机整数,请尝试: function ra ...
- C++: 生成给定范围内的所有多维索引。 模拟任意数量的嵌套循环的行为(附完整源码)
C++: 生成给定范围内的所有多维索引. 模拟任意数量的嵌套循环的行为 test.hpp test.cpp test.hpp void revers ( int ivec[], int kdim ); ...
最新文章
- 除了百度,国内还有哪些无人驾驶公司?
- centos安装JDK与Tomcat
- 鸭鸭邀请------青龙毛毛
- 14.1 线程回顾和同步函数
- Github Actions:再次改变软件开发
- C++ JSON库:JSON for Morden C++
- Discuz!NT数据库读写分离方案
- 1859. 将句子排序
- 强化学习《基于策略价值 - Adventage Actor-Critic》
- MBG配置详解及最佳实践
- go 判断切片是否存在某元素_Golang基础之切片
- 数据分析训练营还有这些内容(Spark)
- 《HTML5游戏编程核心技术与实战》一2.3 图像API
- two points
- 京东登录页面html代码_利用Python爬取京东商品的一种办法
- PackageManager的基本使用
- 搜狗拼音输入法2015 v7.5 官方版​
- ABT Node:为去中心应用开发带来的范式迁移
- 2017安卓开发工程师面试题总结
- 视觉设计师跟平面设计_用户体验设计师应了解的6条视觉设计原则
热门文章
- Android踩内存工具,Android之内存分析工具
- windows server 系统SERVER服务消失无法共享
- fork和vfork,exec
- HBuilde H5开发,关于JSON的Storage存储
- cocos2d-xFinalProject踩坑记录(cocosStudio控件获取,角色移动及动画,碰撞检测,背景音乐与场景)...
- 大B与小b的区别(Bps与bps)
- JSTL不同版本和EL表达式的关联
- 各位玩新浪的SAE的 请点个关注http://weibo.com/i/2062352633
- ubuntu 12.04 下安装 PyTesser 进行OCR识别 - 从波 - 博客园
- 设置HTML元素的透明度