【问题标题】:c++ inserting and sorting "empty" array at the same timec ++同时插入和排序“空”数组
【发布时间】:2014-03-05 15:27:07
【问题描述】:

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

这是 main 的一部分,上面的调用函数尝试将随机数放入其中

  for (i = 0; i < size; i++)
  {
     num = (i + 1)* (rand() % 100);
     arr.push(num, arr, size);
  } 

任何提示我错过了什么?

【问题讨论】:

  • 这个函数是不是应该简单地将给定的项目插入给定的数组中,保持过程中的排序顺序?如果是这样,如何知道数组的顶端容量当前填充大小?
  • 这个例子是用于学习c++还是真正的应用程序?如果是后者,您可以使用一些 STL 容器,例如 std::set,它会为您进行排序。
  • @WhozCraig :是的,它应该以正确的顺序将元素插入到给定的数组中,在这种情况下是升序。如果你所说的高端容量是指数组的大小,它是在创建数组时指定的
  • @MatthiasB 这是学习示例,不幸的是,它必须是一个数组
  • 您是否可以通过遍历数组来完成此操作,一旦找到新元素的正确索引,然后将该位置之后的所有内容向前移动一个 pos 并将新元素插入正确的位置?如果你这样做,你不能假设数组总是排序的,所以每次插入元素时都不需要再次排序。当前的复杂度总是 n^2 这样做你会降低它到 2n。

标签: c++ arrays sorting


【解决方案1】:

这是我编写的代码,只要不需要调整大小,它就可以工作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2011-10-29
    • 1970-01-01
    • 2014-03-06
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多