Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用稳定排序算法vrs和使用原始索引解决关系的不稳定排序的优势是什么?_Algorithm_Sorting - Fatal编程技术网

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)额外内存。