【发布时间】:2017-09-04 14:40:42
【问题描述】:
我有一个元素列表,其顺序几乎是正确的,并且与它们的正确位置相比,这些元素的位置相对较少(例如,没有应该在列表前面的元素是最后)。
实际来源:我有一个传入的 UDP 包流,其中包含所有标记有特定时间戳的信号。评估数据表明,包没有以正确的顺序发送(或接收),因此时间戳不是不断增加,而是有点抖动。要导出数据,我需要提前对其进行排序。
;DR >
我想使用std::list.sort() 对这个列表进行排序。
std::list.sort() 使用的排序算法是什么,列表几乎已排序这一事实对它有何影响。我有一种“感觉”,基于分而治之的算法可能会从中受益。
对于我非常具体的问题,是否有更有效的算法?
【问题讨论】:
-
有many sorting algorithms out there with different performance characteristics for different situations。您将不得不对各种实现进行基准测试,看看哪一个是最好的。在你确定它真的很重要之后。
-
shreevatsa.wordpress.com/2008/05/16/… - 做基准测试,如果它是瓶颈,开始担心算法
-
冒泡排序在这里实际上可能很有用。来自维基百科:“在计算机图形学中,冒泡排序很受欢迎,因为它能够检测几乎排序的数组中的一个非常小的错误(比如两个元素的交换),并以线性复杂度 (2n) 来修复它。”
-
为什么要使用列表?
-
@manni66 看到“Fire Lancer”的回答后,我切换到一个向量并为每个项目从后面插入