如何编写此算法以使其稳定运行

时间:2018-03-19 19:53:15

标签: algorithm stability

假设我们有一个Mystery-Sort(A),它采用A的数组A. length n作为输入,按非递减顺序对A中的数字进行排序,并返回已排序的数组。

我们不知道Mystery-Sort实现的算法是否稳定。 我需要一个过程,它接受一个n个整数的数组,并以非递减的顺序返回排序的数组,但我需要该过程是稳定的。

如何实现稳定排序过程的伪代码Stable-Sort(A),它预处理和/或后处理 在O(n)时间内A中的元素,只调用一次Mystery-Sort,然后返回 排序数组按非递减顺序排列。

1 个答案:

答案 0 :(得分:0)

我认为这分为两个阶段:预处理阶段,您可以在其中找到所有带有标识符的重复元素;一个后处理阶段,您只需将找到的元素覆盖为原始顺序。

您没有指定如何区分排序为相同值的元素;我会称之为id。在第一遍中,构造一个每个值一行的表。遍历数组;将每个元素(或整个元素)的id存储在表中的匹配表行中。如果那里已经存在元素,则扩展该行并存储当前元素。

此时,如果您愿意,可以使用少于2个元素消除表中的任何行。

对于后处理,迭代排序的数组。如果找到的值在表中,则不要信任从Mystery-Sort返回的订单。相反,只需使用表中该行的那些元素覆盖下一个元素。这恢复了原来的顺序。

当你到达排序列表的末尾时,你已经完成了。