如何将非稳定排序转换为稳定算法?

时间:2015-09-13 18:21:20

标签: algorithm sorting

我搜索得太多了,但我找不到很好。

建议一种算法,使所有非稳定排序算法能够作为稳定的排序算法?

2 个答案:

答案 0 :(得分:1)

使用额外的内存来存储数组的原始顺序。然后在比较两个相等元素时在算法中使用该顺序。

以下是如何使Python list.sort稳定的示例:

def make_stable(algorithm):
    def stable_version(A):
        #adding original order of the array
        A2 = [(y, x) for x, y in enumerate(A)]

        #running algorithm in modified array
        algorithm(A2)

        #replacing original array with the result only
        A[:] = [y for y, x in A2]

    return stable_version

A = [3, 2, 1, 2]
stable_sort = make_stable(list.sort)
stable_sort(A)
print A

答案 1 :(得分:0)

有稳定的排序算法和不稳定的排序算法。 您应该选择一个稳定的算法。 Java中的Arrays.sort必须是稳定的。