我还在学习C ++,所以如果这是一个重复点,我要纠正主题,因为我找不到任何好的和有用的解释。 我尝试在我的ascending_ordered_array类中创建一个函数,它将元素插入到“空”数组中,同时对它们进行排序。 下面是我的代码到目前为止,但遗憾的是它不能100%正确工作,因为它添加了两个最大数字作为数组中位置的最后一个。
void ascOrderedArray::push(Datatype p_item, Datatype* p_array, int p_size)
{
int i, j = 0;
int temp, num;
if (p_array[j] < 0)
p_array[j] = p_item;
for (i = 0; i < (p_size - 1); i++)
{
num = p_size;
for (j = (p_size - 1); j >= i; j--)
{
if (p_array[num]> p_array[j])
num = j;
}
temp = p_array[num];
p_array[num] = p_item;
p_array[i] = temp;
}
}
这是上面调用函数的主要部分,尝试将随机数放入其中
for (i = 0; i < size; i++)
{
num = (i + 1)* (rand() % 100);
arr.push(num, arr, size);
}
任何暗示我错过的东西?
答案 0 :(得分:0)
这是我编写的代码及其工作,只要它没有重新调整大小
void ascOrderedArray::push(Datatype p_item)
{
//check if array is big enough and resize it if necessary
if (m_numElements >= m_size)
resize();
//checking if array contains some elements and if not set its first to pased item
if (m_numElements == 0)
{
m_array[0] = p_item;
m_numElements++;
return;
}
else
{
int i = m_numElements;
while (i >= 0 && i <= m_numElements)
{
//shifting array elements
m_array[i] = m_array[i - 1];
if (p_item > m_array[i - 1])
{
m_array[i] = p_item;
break;
}
--i;
}
m_numElements++;
}
}