假设我有一个排序的值数组:
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]
,以便:
v[i[0]] ... v[i[n-1]]
指向一个唯一 数字(即不得指向 5 两次)- 每个数字必须是同类中最右边的(即必须指向最后 5)
- 应始终包含最终数字(在本例中为 13)的索引。
到目前为止我尝试了什么:
- 获取最后一个唯一值的索引
- 打乱索引
- 选出前n个指标
我正在用 C 实现它,所以我可以依赖的标准 C 函数越多,代码越短越好。 (例如,shuffle
不是标准的 C 函数,但如果必须,我必须。)
最佳答案
创建最后索引值的数组
int last[] = { 1, 2, 3, 8, 10, 12, 14 };
从打乱后的数组中取出前 n-1
个元素。
将索引添加到最终数字。
如果需要,对结果数组进行排序。
关于c - 将随机索引选取到排序数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978564/