c++ - 立即在排序位置放置一个值

标签 c++ sorting

我有一个关于 C++ 实验室作业的问题。任务是实现一些函数来添加值,从数组中删除值等等。我现在已经完成了大部分工作,但是我在插入功能方面遇到了一些问题。该作业要求我将浮点值插入到该数组中,而无需在每次插入后使用任何算法对其进行排序。我也可能不会使用任何来自 STL 的东西。它将假设我立即将每个值插入排序位置

所以我想知道是否有人可以告诉我如何解决这个问题?

编辑 我不打算用链表来实现这个任务。它将用于我的下一个作业。

我试过根据你的伪代码写一个插入函数。虽然我没有正确理解。无论如何,这是代码。

void array_insert(data_t list[], int& space_used, data_t value)
{

   if(space_used == 0)
   {
      list[space_used] = value;    
   }
   else
   {

      for(int i = space_used+1; i >= 0; i--)
      {
         if(value > list[i])
         {
            list[i+1] = value;
            break;
         }
         else
         {
            list[i+1] = list[i];
         }
         if(i == 0)
         {
            list[i] = value;
         }
      }
   }
   space_used++;
}

终于完成了,下面是完整的代码。感谢 Mark 和 Casablanca 的帮助

最佳答案

您必须移动所有元素以便为新元素腾出空间。这是一个 O(n) 操作。既然你不能比 O(n) 做得更好,我认为使用这个简单的 O(n) 算法是合理的:

  • 将 i 设置为数组中最后一个元素的索引
  • 如果要插入的元素大于 a[i],则在索引 i+1 处插入元素并停止。
  • 否则设置 a[i+1] = a[i] 然后减小 i 并重复上一步。
  • 如果 i 达到 0,则在开头插入元素。

这假定您的数组有空间可以插入一个额外的元素。

关于c++ - 立即在排序位置放置一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3743764/

相关文章:

c++ - 在 Visual Studio 2015 中使用 QtAddIn 调试 Visual Studio 2013 运行时

C++ DLL 调用在消费应用程序中实现的函数

java - 无法将 int 添加到 ArrayList 的 ArrayList 中

algorithm - APL习语渐进索引

python - numpy.linalg.svd 不按降序返回西格玛

c++ - 从 std::exception 继承的正确方法

c++ - map 中的emplace_hint有什么用?

javascript - 数据表:需要按 HTML 中的数据对列进行数字排序

java - 对hashmap Java的键进行排序的有效方法

c++ - 错误 : ldd outputLine: "libicui18n.so.56 => not found"