c ++同时插入和排序“空”数组

时间:2014-03-05 15:27:07

标签: c++ arrays sorting

我还在学习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);
  } 

任何暗示我错过的东西?

1 个答案:

答案 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++;
    }
}