c - 将随机索引选取到排序数组中

标签 c arrays random

假设我有一个排序的值数组:

int n=4; // always lower or equal than number of unique values in array
int i[256] = {};
int v = {1 1 2 4 5 5 5 5 5 7 7 9 9 11 11 13}
// EX 1        ^         ^       ^       ^
// EX 2    ^                 ^         ^ ^
// EX 3    ^ ^           ^               ^

我想生成 n 个随机索引值 i[0] ... i[n-1],以便:

  1. v[i[0]] ... v[i[n-1]] 指向一个唯一 数字(即不得指向 5 两次)
  2. 每个数字必须是同类中最右边的(即必须指向最后 5)
  3. 应始终包含最终数字(在本例中为 13)的索引。

到目前为止我尝试了什么:

  1. 获取最后一个唯一值的索引
  2. 打乱索引
  3. 选出前n个指标

我正在用 C 实现它,所以我可以依赖的标准 C 函数越多,代码越短越好。 (例如,shuffle 不是标准的 C 函数,但如果必须,我必须。)

最佳答案

创建最后索引值的数组

int last[] = { 1, 2, 3, 8, 10, 12, 14 };

Fisher-Yates shuffle数组。

从打乱后的数组中取出前 n-1 个元素。

将索引添加到最终数字。

如果需要,对结果数组进行排序。

关于c - 将随机索引选取到排序数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978564/

相关文章:

c - opengl:无法绘制左墙

java - 按降序/升序对数组中的字符串数据进行冒泡排序

PostgreSQL:在同一张表上使用 select 语句更新字段

c# - 为什么 System.Random 类不是静态的?

c - 使用 2 个函数的数字总和

c - fgets() 从键盘读取新行字符

c - 用于内核开发的 LInux 与 BSD

java - 如何在从另一个类构建的类中搜索单词?

java - Knight's Tour 代码陷入无限循环,没有达成解决方案

javascript - 随机函数在 JavaScript 中不起作用