Python在排序列表上排序复杂性

Bar*_*ski 10 python sorting

sort(already_sorted_list)Python 的复杂性是什么?Python会检查给定的iterable是否已排序,或者我是否必须自己完成?我无法在文档中的任何地方找到它.

mgi*_*son 11

完全取决于实现.所有python保证的是内置排序算法是稳定的(比较相等的元素保持它们的相对排序).如果想要实现,实现甚至可以使用稳定的冒泡排序......

Cpython使用TimSort(插入排序和mergesort的混合),如果输入已经排序,我认为它具有O(N)复杂度 - 它获得了插入排序的最佳情况性能和mergesort的最坏情况性能(O(NlogN) )).

如果您对实现很好奇,源代码有一个非常好的描述.

  • 至关重要的是,这意味着将`sorted`应用于排序列表*与检查事先排序*一样高效. (6认同)