您好我正在尝试创建一个插入随机数的数组,但是当它执行时,该数组保持维护顺序。例如,如果数组包含10 20 30且随机数为11,则函数将在10之后放置并在列表中移动20和30。以下是该功能的要求。
到目前为止,这是我的代码。我的输出中没有任何结果。
#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];
}
}
答案 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