【发布时间】:2021-11-01 11:28:43
【问题描述】:
我的目标是创建一个由 5 个介于 1 到 20 之间的唯一整数组成的数组。有没有比我下面使用的算法更好的算法?
它有效,我认为它具有恒定的时间复杂度,因为循环不依赖于可变输入,但我想知道是否有更高效、更简洁或更简单的方法来编写它。
int * getRandom( ) {
static int choices[5] = {};
srand((unsigned)time(NULL));
for (int i = 0; i < 5; i++) {
int generated = 1 + rand() % 20;
for (int j = 0; j < 5; j++){
if(choices[j] == generated){
i--;
}
}
choices[i] = generated;
cout << choices[i] << endl;
}
return choices;
}
非常感谢您的任何反馈。我是算法新手。
【问题讨论】:
-
我不确定这到底是做什么的,所以我怀疑有一种更清洁、更简单的方法来编写它。您将
i作为外部循环的索引,但是内部循环也 与i混淆?你能口头描述一下这个算法是如何生成 5 个唯一整数的吗?见rubber duck debugging -
不要在使用它的函数中植入随机数生成器。
-
使用
% 20会在您的随机数中引入偏差,因此它们不会像应有的那样随机。 -
您的标题中有一个奇怪的措辞:“C++ 中是否有更好的算法 [...]?” 算法是抽象的,不限于单一语言。语言可能会影响哪些算法易于实现,但不会影响哪些算法存在。 (另外,建议不要在 Help: Tagging 的标题中强制添加标签。)
-
对于数字的随机性没有要求,因此每次返回 (1,2,3,4,5) 符合规范。
标签: c++ performance random array-algorithms