性能问题同时生成随机数并插入已有n个数字的数组

时间:2015-11-20 09:37:28

标签: c++ arrays performance random heap-memory

以下是我用于生成随机数并将其插入数组的代码。假设我想要生成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 注意:数字可能重复

1 个答案:

答案 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;
    }
}

如果创建的原始数组的大小可以填充任何后续迭代,那么它将节省大量的计算/内存。如果尺寸太小,该算法仍然有效。只需将初始数组复制到更大的数组中即可。