高效产生一组不重复的随机数(受编程珠矶启示)java实现
2013-11-13 20:02
543 查看
高效产生一组不重复的随机数这个需求应该是很常见的吧,需要从 0 到 n 之间选 k 个不重复的数组成一个序列。算法复杂度O(n),受编程珠矶启示,我用java写了该算法的实现,由于时间比较紧,其他的以后补充吧,直接上算法和效果:
我们有时候需要进行一些数据的测试,苦于没有这些数据,我的初衷也是如此,我也折腾了很久,发现目前这种方法的效率是最高的,贴出来同有需要的朋友分享一下,有不妥之处还望各位网友朋友不吝赐教。
import java.util.Scanner; //随机生成n个不重复随机数,算法复杂度O(n) 受编程珠矶启示 public class Test2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //输入产生随机数的个数n System.out.println("输入产生随机数的个数n:"); int n = sc.nextInt(); //初始化一个数组 int[] arr = new int ; for(int i=0;i<arr.length;i++){ arr[i]=i; } //交换数组中的两个元素值 for(int i=0;i<arr.length;i++){ swap(arr,i,randInt(i,arr.length-1)); } //输出随机后的数组值 for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); if((i+1)%10==0) System.out.println(); } } //randInt()函数的实现 private static int randInt(int x,int y){ //return (int)(Math.random()*100%(y-x+1)+x);//这个算法还是不好 return (int)(Math.random()*(y-x+1)+x); } //实现swap()方法 private static void swap(int[] arr,int x,int y){ int temp ; temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } 运行结果:
我们有时候需要进行一些数据的测试,苦于没有这些数据,我的初衷也是如此,我也折腾了很久,发现目前这种方法的效率是最高的,贴出来同有需要的朋友分享一下,有不妥之处还望各位网友朋友不吝赐教。
相关文章推荐
- 高效产生一组不重复的随机数(受编程珠矶启示)java实现
- [转] 高效的产生一组不重复的随机数
- 高效产生一组不重复的随机数
- 产生一组不重复随机数的高效算法
- java 产生一组不重复的随机数
- java 产生一组不重复的随机数
- JavaScript 产生不重复的随机数三种实现思路
- java 产生多个不重复的随机数
- java高效实现随机数的方法
- java随机生成6/8/12位数,要求每次产生的随机数与已生成的随机数不重复
- java 使用hashset产生不重复的随机数
- Java产生900个1到1000不重复的随机数
- java实现一组不同随机数的五种方法
- 高效产生不重复的随机数
- java 生成一组不同的随机数(不重复)
- Java基础知识强化之集合框架笔记35:List练习之产生10个1~20之间的随机数(要求:随机数不能重复)
- 随机不重复排序算法及Java产生随机数的3种方式
- C#产生一组不重复随机数的两种方法
- java产生任意范围内不重复的随机数
- 【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数