假设我有一组排序的双打。
{ 0.124, 4.567, 12.3 }
代码的另一部分创建了一个正的非零双精度,并且需要在保持排序的同时插入到该集合中。例如,如果创建的 double 是7.56
,则最终结果是,
{ 0.124, 4.567, 7.56, 12.3 }
在我的代码中,这个“创建双精度并在排序集中插入”过程会重复很多次。可能 500k 到 100 万次。我不知道总共会创建多少双打,但我知道上限。
试图
我天真的第一种方法是创建一个长度 = 上限的数组并用零填充它,然后将初始的双精度集添加到其中(“添加”=用双精度值替换 0 值条目)。每当创建一个 double 时,我将它添加到数组中并进行插入排序,我读到这对于排序有序数组很有用。
问题
我感觉运行 500k 到 100 万个插入插槽将是一个严重的性能问题。(或者我错了吗?)在 C 中是否有更有效的数据结构和/或算法来执行此操作?
编辑:
我想保持集合排序的原因是因为在每次“创建双精度并在排序集合中插入”过程之后,我需要能够查找该集合中的最小元素(并可能通过将其替换为 0 来删除它)。我认为最好的方法是保持集合排序。
但如果不是这样,也许还有其他选择?