生成随机数并插入已包含n个数的数组时出现性能问题

Performance Issue while generating random numbers and inserting into an Array with already n numbers

本文关键字:数组 问题 性能 随机数 插入 包含      更新时间:2023-10-16

这是我用来生成随机数并将其插入数组的代码。假设我想生成1000000个随机数,并在生成的随机位置插入已经具有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、2、3、5、6、7、5、2、6注意:数字可以是重复的

我做了假设:

  • 随机数将只用于填充最终数组,而不会用于其他任何地方
  • 数组已具有所需的大小

实际代码:

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

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