以下是我用于生成随机数并将其插入数组的代码。假设我想要生成1000000个随机数并插入到已生成随机位置已经MAXSIZE个元素数的数组中。以下逻辑实际上是由于堆内存很少而导致我的系统崩溃了很长时间。
这里MAXSIZE = 1000000
srand(time(NULL));
for (int i = 0; i<MAXSIZE; i++)
{
int randomNo = rand() % MAXSIZE;
randArray[i] = randomNo;
}
//Inserting Random numbers for an Array at a random position
for (int i = position, j = 0; i < (2 * size); i++, j++)
{
bArray[j] = aArray[i];
aArray[i] = randArray[j];
}
for (int i = position + size, j = 0; i < ((2 * size)); i++, j++)
{
aArray[i] = bArray[j];
}
有人可以提出一种更好的方法来编写代码,这样系统就不会因为一大堆数字而崩溃并将其放入数组中。
例如,最初我将在一个数组中有10个数字。现在我将生成10个随机数,并将其插入到0-10中随机生成的位置。所以现在输出变成了20个元素。首先,我正在生成大小为2 * 10的数组。在我的问题中,数字是100000或更多,而不是10。
更确切地说:
我想要的是: 例如:初始数组Arr [10]是1,3,5,2,6 生成的随机数组是:2,3,5,6,7 产生的随机位置是:3 最终阵列应为:1,3,3,3,5,6,7,5,2,6 注意:数字可能重复
答案 0 :(得分:0)
我做了一些假设:
实际代码:
srand(time(NULL));
// position -> position at which numbers should be inserted
// size -> size of table
// n -> how many random number should be inserted
if(position + n > size) n = size - position;
for (int i = size; i >= 0; i--)
{
if(i >= position + n) {
aArray[i] = aArray[i-n];
}
if(i >= position && i <= position + n) {
aArray[i] = rand() % MAXSIZE;
}
}
如果创建的原始数组的大小可以填充任何后续迭代,那么它将节省大量的计算/内存。如果尺寸太小,该算法仍然有效。只需将初始数组复制到更大的数组中即可。