timsort是通用的还是特定于Python的?

时间:2008-09-30 19:12:47

标签: python algorithm sorting

  

Timsort是一个适应性强,稳定的,   自然合并。它有超自然现象   多种部分表现   有序数组(小于lg(N!)   所需的比较,以及少数   N-1),但速度与之前的Python一样快   高度调整的样品杂交   随机数组。

您是否在CPython之外看过timsort?它有意义吗?

7 个答案:

答案 0 :(得分:30)

是的,在CPython之外,特定的或一般的Python中使用timsort是非常有意义的。

目前有一个effort underway用timsort替换Java的“修改后的合并排序”,初步结果是非常积极的。

答案 1 :(得分:24)

该算法非常通用,但其优点是特定于Python。与大多数排序例程不同,Python的list.sort(使用timsort的是什么)关心的是避免不必要的比较,因为通常比较比交换项目更加昂贵 lot (它总是只是一组指针复制)甚至分配一些额外的内存(因为它总是只是一个指针数组,与任何Python操作中的平均开销相比,开销很小。)

如果你受到类似的限制,那么它可能是合适的。我还没有看到任何其他比较真的那么昂贵的情况: - )

答案 2 :(得分:6)

它看起来并不特别熟悉,但“智能”合并在广泛的软件世界中非常普遍。

至于它是否有意义,这取决于你的排序,以及比较与内存分配的相对成本。在内存受限的环境中,需要最多2 * N字节额外内存的排序不会是一个不错的选择。

答案 3 :(得分:4)

现在回复Wikipedia:将在Java 7中使用timsort,他将从Android中复制它。

答案 4 :(得分:3)

答案 5 :(得分:0)

您链接的说明看起来很完整。

答案 6 :(得分:0)

Timsort不是 特定于Python的。在任何具有指针或对象引用的编程语言中,都存在在Python中使用Timsort对对象引用列表进行排序的好处。例如,Java SE 7 +,Android和Swift使用Timsort对对象进行排序。

另一方面,由于高速缓存的一致性,快速排序的某些变体(例如,内向排序,双轴快速排序)通常可以更快地对原始类型进行排序,因此通常选择此类型。