Algorithm 使用稳定排序算法vrs和使用原始索引解决关系的不稳定排序的优势是什么?
稳定排序算法比不稳定排序慢。例如,使用Algorithm 使用稳定排序算法vrs和使用原始索引解决关系的不稳定排序的优势是什么?,algorithm,sorting,Algorithm,Sorting,稳定排序算法比不稳定排序慢。例如,使用O(n*log(n)*log(n))调用交换元素 如果我们的目标是保留元素的原始顺序,为什么不将它们全部编号(O(n)),然后使用原始索引执行不稳定排序(O(n*log(n))),以解析比较相等的实例 这似乎更快 i、 e.O(n)+O(n*log(n))
O(n*log(n)*log(n))
调用交换元素
如果我们的目标是保留元素的原始顺序,为什么不将它们全部编号(O(n)
),然后使用原始索引执行不稳定排序(O(n*log(n))
),以解析比较相等的实例
这似乎更快
i、 e.O(n)+O(n*log(n))
这是正确的吗?
有什么理由选择稳定排序吗?除了缓存效果,稳定排序通常比不稳定排序更快,因为它们允许使用额外内存 从golang链接到的稳定排序不使用额外的空间,因此必须使用较慢的算法。当重要的是不要使用额外的内存时,可以使用不稳定排序,因为它们在大多数情况下速度几乎相同,并且不需要额外的内存 但是,如果必须为索引分配额外内存,那么最好使用快速稳定排序。有很多方法可以在O(N log N)时间内使用相同数量的额外空间完成此操作。介绍排序(快速排序+堆排序,因此最坏情况下的时间复杂度是O(N log(N))在两个数组上(原始数据+原始数据索引)比合并排序(在单个数组上)需要更长的时间,它不需要对原始数据+索引数组进行排序
不稳定的快速排序仅比合并排序快15%左右。同时对两个数组进行排序会比合并排序慢。合并排序的主要缺点是使用第二个数组。在具有16个寄存器的处理器上,例如64位模式下的X86,四向合并排序的速度大约与快速排序的速度相同。为清楚起见,请使用st在第一段中,您是在讨论需要保留原始顺序的情况,还是在一般情况下?稳定排序(通常是合并排序)保留比较相等的元素的原始顺序。不稳定排序(例如快速排序)没有。也许我漏掉了什么。稳定排序怎么可能比不稳定排序快呢?唯一的区别是额外的要求。是的,答案是不正确的…什么时候稳定排序可能很重要-想象一下你正在浏览器中查找一些统计数据。数据会不时变化,因此浏览器排序会改变t、 但是我决定根据用户是否注册来显示。如果浏览器对数据进行排序,则每次排序后行的顺序可能会改变。可以吗?(另一种可能性是添加一些其他“隐藏”条件,在必需之后。@Robert如我所说,使用额外内存的稳定排序,如MergeSort,通常比不使用额外内存的不稳定排序快。它们有额外的稳定要求,但不需要在没有额外空间的情况下工作。当然,您可以对所有内容进行编号。代价是O(n)时间和O(n)额外内存。