大家好
我想从另一个数组一次添加一个元素到一个临时数组。每次我向临时数组添加一个元素时,我想查看我已添加到它的内容。
我这样做是为了分类,我对此很新。
我知道我必须使用for循环
int numbers[6]; //main array
int tempArr[6]; //temporary array I would like to add elements to
for(int i = 0; i < 6; i++)
{
//if temp element just added is >, < or = any element in temp array
//do stuff
}
数字数组中的元素来自一个文件,所以到目前为止它们已经在数字数组中了。我只需要将每个值一次传递给临时数组,这样我就可以在临时数组中查找更低,更高或相等的值
希望你能提供帮助,我到处寻找,似乎没有任何东西符合我的需要:(
答案 0 :(得分:1)
在我看来,你应该考虑Insertion Sort算法。每次你需要添加一个新值时,只需将它放到最后的当前临时数组中,然后将值向下推到数组中,直到找到它为止,并且知道该项目的当前索引,就可以找到所有元素&LT;或者&gt;比这个。
该算法在平均情况下具有O(n ^ 2)复杂度。您可以使用二叉树实现O(n log n)。
答案 1 :(得分:0)
我认为你需要一个std::set
:
std::set< int > temp;
for (int i(0); i < (sizeof(numbers) / sizeof(numbers[0])); ++i)
{
temp.insert(numbers[i]);
}
set
将有效地排序和消除重复
答案 2 :(得分:0)
你遗失了两件事:
tempArr
开始是空的。)tempArr
执行此操作)。
//if temp element just added is >, < or = any element in temp array
任何元素都是&gt;,&lt;或者总是对任何其他元素。 (好吧,除非有一些时髦的运算符重载。)
详细说明你的伪代码。也许可以添加一两个函数调用。
答案 3 :(得分:0)
您可以使用另一个循环轻松完成此操作。如果您确定文件中总共有6个项目(根据上面数组的大小,这是您目前所拥有的项目),那么您可以执行以下操作:
for (i = 0; i < 6; i++)
{
numbers[i] = temp[i];
for (j = 0; j < count; j++)
{
if (temp[i] > temp[j])
// Do something
if (temp[i] < temp[j])
// Do something else
if (temp[i] == temp[j])
// Do something else
}
count++;
}
如果输入元素的数量是可变的,则需要调整其他内容,否则这将逐个将“数字”中的每个元素移动到“temp”数组,并且在每次移动时,它将看起来通过整个其他项目列表,检查新值是否小于,大于或等于刚刚添加的值。
编辑:如果您尝试对tempArray中的项目进行排序,请按其他人的建议查找插入排序。如果您只想以递增(或降序)顺序获取numberArray中的元素,您可以查看冒泡排序,这可能更容易让新程序员处理,因为它不需要第二个数组。