zoukankan      html  css  js  c++  java
  • 快速获取[0,n]之间的k个不同的随机顺序的随机整数

    如果生成位于0到n-1之间的k个不重复的随机顺序的整数呢?
    /**
    	 * 随机抽取[0,n)之前的k个不同的数并随机排序,(k<=n)
    	 * 
    	 * @param n
    	 * @param k
    	 * @return 随机排序的数组,长度为k
    	 */
    	public static int[] getRandomArray(int n, int k) {
    		if (k > n) {
    			k = n;
    		}
    		int[] rets = new int[k]; // 保存取出的随机数
    		int[] array = new int[n];// 定义初始数组
    		for (int i = 0; i < n; i++)
    			array[i] = i;
    		Random random = new Random();
    		for (int j = 0; j < k; j++) {
    			int index = j + random.nextInt(n - j);// 生成一个[j,n)之间的随机数,作为数组下标
    			// 交换array[j]和array[index],那么array[0..j]为已经获取到的随机数
    			int temp = array[index];
    			array[index] = array[j];
    			array[j] = temp;
    			// 把此次获取到的随机数存到rets里面
    			rets[j] = temp;
    		}
    		return rets;
    	}
    

    来自《编程珠玑(第二版)》第一章习题4
  • 相关阅读:
    数据库插入
    c#里面调用python
    抓取最好大学网
    selenium抓取慕课课程
    excel合并
    网页抓取
    pyinstaller打包报错
    获取微信联系人
    c#部分类
    C#只读属性
  • 原文地址:https://www.cnblogs.com/cwjcsu/p/8433090.html
Copyright © 2011-2022 走看看