将随机数插入到具有排序顺序C ++的数组中

时间:2012-08-26 19:10:34

标签: c++ arrays random variable-assignment sortedlist

您好我正在尝试创建一个插入随机数的数组,但是当它执行时,该数组保持维护顺序。例如,如果数组包含10 20 30且随机数为11,则函数将在10之后放置并在列表中移动20和30。以下是该功能的要求。

  • insertNumber将给定的随机数插入数组并保持顺序。
  • 数据数组包含从索引0到大小为2的排序顺序的整数。
  • randomNum是要插入的整数
  • data是包含有序整数的数组
  • size是数组可以容纳的元素总数

到目前为止,这是我的代码。我的输出中没有任何结果。

#include"utils.h" 

void insertNumber(int randomNum, int data[], int size)
{
    for(int i = 0; i < 10; i++)
    {
        randomNum = data[i];
        if (randomNum > data[i] && i < size - 2)
        {
            for ( int j = 0; j < 10; j--)
            {
                data[i+1] = data [i];
                i--;
            } 
        }
        data[i] = randomNum;
    }
}

void display(int data[],  int size)
{
    for (int i = 0; size < 10; i++)
    {
        cout << " " << data[i];
    }

}

4 个答案:

答案 0 :(得分:3)

您可以使用std::lower_bound算法来设置插入位置,使用std::vector容器来使用insert方法移动元素

答案 1 :(得分:1)

您可以使用BinarySearch搜索数组并查看随机数是否存在。如果确实存在,则可以插入现有附近。

void binary_search(int A[], int key, int imin, int imax)
{
  if (imax < imin):
    // Insert key as the next element after imax
  else
    {
      // calculate midpoint to cut set in half
      int imid = midpoint(imin, imax);

      // three-way comparison
      if (A[imid] > key)
        // key is in lower subset
        binary_search(A, key, imin, imid-1);
      else if (A[imid] < key)
        // key is in upper subset
        binary_search(A, key, imid+1, imax);
      else
        // key has been found so insert it after imax
    }
}

答案 2 :(得分:0)

这不是更好的实施方法吗?

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>

int main() {
    std::vector<int> randomInts;
    srand(time(0));
    for(int i = 0; i < 10; i++)
        randomInts.push_back((rand()%30)+1); //Inserts random numbers 1-30.

    std::sort(randomInts.begin(),randomInts.end());
    for(auto i : randomInts)
        std::cout << i << " ";
}

输出:3 6 9 13 14 16 19 20 25 30

答案 3 :(得分:-1)

在函数

中找到大于它的元素后插入随机数
for( i =0; i<size ;i++)
{
    if(data[i] > randomNumber)
    {
         valueToPush = data[i];
         data[i] = randomNumber;
         randomNumber = valueToPush;
    }
}
data[size] = randomNumber