`
OpenMind
  • 浏览: 179566 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

快速获取[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#实现将数组内元素打乱顺序的方法

    这里使用了`Random`类来生成随机索引,`DateTime.Now.Millisecond`作为种子,确保每次运行时都能得到不同的随机序列。 在主函数`Main`中,我们创建了一个整数数组并实例化了`Item&lt;int&gt;`对象。然后,我们打印出数组...

    C#做的随机点名系统

    C#中的Random类是实现这一功能的关键,它可以生成一系列随机整数,这些整数可以代表学生名单中的索引,以此达到随机选取名字的目的。开发者可能通过创建一个包含所有学生名字的列表,然后利用Random类生成的随机索...

    漫话数据结构-线性表的顺序存储.pptx

    【线性表】是数据结构中的基础概念,它是由n(n≥0)个数据元素按照特定顺序排列的有限序列。线性表可以是空表(n=0),也可以是非空表(n&gt;0)。非空线性表的每个元素都有唯一的前后关系:第一个元素称为首元素,...

    验证码(随机背景图).zip

    4. **随机生成验证码**:在JavaScript中,可以使用Math对象的random()方法生成0到1之间的随机数,通过乘以特定范围并取整,可以得到指定范围内的随机整数。这个系统会根据设定的长度,随机生成字母验证码。 5. **...

    随机排行实现

    在IT行业中,"随机排行"通常是指一种编程技术,用于生成具有随机顺序的排行榜或列表。这个概念在各种应用场景中都很常见,例如在线游戏、数据分析、推荐系统等。下面我们将详细探讨如何实现随机排行,涉及的主要知识...

    算法设计实验报告-快速排序和归并排序

    在本次实验中,我们编写了一个Java程序,生成一定数量的随机整数,然后使用快速排序和归并排序对这些整数进行排序,并记录各自的执行时间。实验结果可能受到数据分布、硬件环境等因素的影响,因此需要多次运行以获取...

    计算机数据结构线性表

    线性表是计算机科学中数据结构的基础概念,它是由n(n大于等于0)个相同类型的数据元素构成的有限序列。线性表可以是空表,也可以包含一个或多个元素,每个元素都有唯一的前驱和后继,除了第一个元素(表头)没有...

    Oracle中如何用一条SQL快速生成10万条测试数据

    这条SQL语句创建了一个名为`myTestTable`的新表,并填充了10万条数据,每条数据包括一个递增的ID(id)、一个按秒递增的日期时间(inc_datetime)、一个0到100之间的随机整数(random_id)和一个长度为20的随机字符...

    php中通过数组进行高效随机抽取指定条记录的算法

    `array_rand()` 函数就是为此目的设计的,它能够帮助开发者快速、随机地从数组中获取一个或多个元素。 `array_rand()` 函数的基本语法如下: ```php mixed array_rand(array $input[, int $num_req] ) ``` 参数...

    php使用array_rand()函数从数组中随机选择一个或多个元素

    如果将 `number` 参数设置为2,`array_rand()` 将返回两个不同的随机键,例如 `array('b', 'c')`。注意,由于是随机选取,每次运行代码时结果可能会不同。 ### 返回值 `array_rand()` 函数返回的是一个或多个随机...

    MATLAB实例编程之一个成绩分析和处理的程序实例讲解

    也可以使用 randi()函数生成整数随机数,例如y = randi(imax)将生成一个介于1和imax之间的随机整数。 二、数组操作 在MATLAB中,数组是最基本的数据结构。可以使用size()函数来获取数组的行数和列数,例如s = size...

    php生成随机数/生成随机字符串的方法小结【5种方法】

    在示例中,`GetRandStr` 函数使用 `mt_rand()` 生成0到字符串长度减1之间的随机数,作为索引获取字符串 `$str` 中的字符,从而生成随机字符串。 ```php function GetRandStr($length) { $str = '...

    Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结

    之后,可以使用`nextInt()`、`nextLong()`等方法获取不同类型的随机数。需要注意的是,相同的种子会产生相同的随机数序列。 生成给定范围内的N个不重复随机数,有两种常见方法: 1. **两重循环去重**:这是一种...

    全能GUID生成工具

    总的来说,这个“全能GUID生成工具”是一个方便开发人员和系统管理员快速获取唯一标识的实用程序,它基于Delphi7开发,提供随机和顺序两种生成模式,适用于各种需要唯一标识符的场合。用户只需运行`CreateGUID.exe`...

    基本线性表PPT学习教案.pptx

    由于元素的存储位置可以通过索引直接计算得出,顺序存储结构提供了随机访问的能力,即可以快速访问任意位置的元素。 在C++中,为了实现数据的封装和抽象,通常会使用类模板来定义顺序表。类模板是一种通用的类定义...

    NOIP2013初赛普及组C试题.docx

    该系统每次随机生成n个数a1,a2,…,an,均为0或1,请用户回答(s1a1+s2a2+…+snan)除以2的余数。如果多次的回答总是正确,即认为掌握密码。然而,事与愿违。例如,当n=4时,有人窃听了以下5次问答:就破解出了密码s1= ...

    易语言转凌晨孤星的超级列表框排序功能的实现

    易语言提供了生成随机字符串的功能,可以结合循环和字符串操作生成不同长度和内容的随机文本。这有助于在测试排序功能时提供多样化的输入数据。 2. **排序列表**: 超级列表框的排序通常涉及对数据数组的排序,而...

    实验报告(四).docx

    - 使用列表推导式快速生成一个包含 10 个随机整数的列表。 - 通过 `for` 循环结合列表切片的方式,实现列表元素的左移操作。 - **示例代码**: ```python import random # 生成长度为 10 的随机整数列表 ...

    阿里巴巴2017秋季校园招聘笔试试题(1).pdf

    题目中提到的选项D:`h(K)=(K+rand(N)) mod N`,其中`rand(N)`返回0到N-1的整数,是一个较好的散列函数,因为它引入了随机性,使得键的分布更均匀。 2. 排序算法性能:不同的排序算法在处理不同顺序的数据集时表现...

Global site tag (gtag.js) - Google Analytics