def sorted(*args, **kwargs): # real signature unknown
"""
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.
"""
pass
sort()函数和sorted()函数的区别:
sorted()使用语法:
sorted(iterable, key=None, reverse=False)
# iterable: 可迭代的对象
# key: 用来进行比较的元素,指定可迭代对象中的一个元素来进行排序
# reverse: 默认为False,升序;reverse=True为降序排列
sort()和sorted()使用区别:
a = [8, 4, 9, 1, 5]
a.sort()
# a = [1, 4, 5, 8, 9]
b = [8, 4, 9, 1, 5]
c = sorted(b)
# c = [1, 4, 5, 8, 9]
# b = [8, 4, 9, 1, 5] 不变
sort()和sorted()函数的底层实现及复杂度?
底层实现:Timsort
最坏时间复杂度:O(nlogn)
空间复杂度: O(n)
Timsort是什么?
Timsort是一种混合、稳定高效的排序算法,结合了插入排序和归并排序。
Timsort的思想
在现实中,需要排序的一大段数据里,大部分是已经排好序的一些数据块。Timsort利用这一特点,将这些小的数据块称为一个一个的run, 也称为“分区”,在排序时,Timsort迭代数据元素,将数据插入到不同的分区中,同时将这些分区进行合并,直到分区合并到最后只剩下一个时,这个最后的run即为排序好的结果。
简单来说,就是用插入排序扩充小的分区,然后合并分区 得到最终的排列结果。
补充:Timsort()用的是二分插入排序,先用二分查找找到需要插入的位置,然后再插入。(python中比较的成本大于移动的成本,因此尽量减少比较为好)