稳定和就地相同吗?

时间:2013-12-04 12:32:10

标签: algorithm sorting

谈论算法时。我看到了就地和稳定排序算法的描述。是说算法是稳定的,就像说它的原位一样?如果没有什么区别?

3 个答案:

答案 0 :(得分:5)

不,

稳定算法意味着在执行算法后,“相等”元素的相对排序应保持相同。

例如,如果你有一个数组

{-2, 4, 5, -11, 9, -10} 

并且您希望对其进行排序,使得所有负面元素都位于正元素之前。并且您希望-ve和+ ve元素的相对排序保持不变

{-2, -11, -10, 4, 5, 9} 

这是稳定算法的输出

如评论中所述,就地算法意味着算法不需要输入数据以外的额外空间。输出是数据占用内存中由输入数据占用的相同位置,输入数据被破坏。

答案 1 :(得分:2)

稳定意味着输入元素的顺序不变,除非需要进行更改以满足要求。应用于一系列相等元素的稳定排序不会改变它们的顺序。

就地意味着输入和输出占用相同的内存存储空间。没有输入到输出的复制,除非您制作了备份副本,否则输入将不再存在。这是一种通常需要命令语言来表达的属性,因为纯函数式语言没有存储空间或覆盖数据的概念。

答案 2 :(得分:1)

不,它不一样。

稳定排序是指对于比较相等的元素,它们在排序输出中的相对位置保证与源中的相对位置相同。将此与不稳定排序进行对比,其中比较相等的项目将以不可预测的顺序出现在排序结果中。这种区别在简单的情况下并不重要(例如排序整数),但是当排序标准只是每个项目所包含的数据的一部分时(例如,仅按大小排序彩色袜子),这一点很重要。

就地排序是对输入进行排序而无需额外空间的排序;它也被称为“破坏性”排序,因为排序后你丢失了输入数据的未排序形式(它已被排序数据替换)。