问题描述
||
嗨,大家好
我想一次将一个元素从另一个数组添加到一个临时数组ive中。每次我将元素添加到临时数组时,我都想浏览一下我已经添加到它的内容。
我这样做是为了进行排序,对此我是一个新手。
我知道我必须使用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
}
Numbers数组中的元素来自文件,因此到目前为止,它们已经在Numbers数组中。我只需要一次将每个值传递给temp数组,这样就可以在temp数组中查找较低,较高或相等的值
希望你能提供帮助,我到处都看过了,似乎没有任何东西可以满足我的需求:
解决方法
在我看来,您应该真正考虑插入排序算法。每次您需要添加新值时,只需将其放在当前临时数组的末尾,然后将其向下推到数组中,直到找到它的位置并知道该项目的当前索引即可能够找到除此元素之外的所有元素。
在平均情况下,该算法具有O(n ^ 2)复杂度。您可以使用二叉树实现O(n log n)。
,我认为您需要
std::set
:
std::set< int > temp;
for (int i(0); i < (sizeof(numbers) / sizeof(numbers[0])); ++i)
{
temp.insert(numbers[i]);
}
set
将有效地排序并消除重复项
,您缺少两件事:
一种知道数组中有多少个元素的方法。 (C ++数组的大小是固定的(在您的情况下,两者均为6),但是tempArr
可能是空的。)
一种将元素插入数组的方法(您将对“ 4”进行操作)。
。
//if temp element just added is >,< or = any element in temp array
任何元素始终总是>,<或=。 (好吧,除非有一些时髦的运算符重载。)
详细说明您的伪代码。也许添加一个或两个函数调用。
,您可以通过另一个循环很容易地做到这一点。如果您确定文件中始终有6项(根据上面数组的大小,当前项就是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++;
}
如果输入元素的数量是可变的,则需要调整其他内容,否则,将把“ numbers”中的每个元素逐一移动到“ temp”数组,并且每次移动时,它都会查看其他项的整个列表,并检查新值是否小于,大于或等于刚添加的值。
编辑:如果您试图对tempArray中的项目进行排序,则按照其他人的建议查找插入排序。如果只想按升序(或降序)获取numberArray中的元素,则可以查看冒泡排序,这对于新程序员来说可能更容易处理,因为它不需要第二个数组。