目录
1. Sort
2.Sorted
3.快速排序
3.1 为什么学快排?
3.2 快排的基本实现思路(代码实例是从小到大)
1.1 sort函数是列表 list 的内置函数 list专用!!!!
1.2 sort函数的语法和调用方式:list.sort(key,reverse)
1.3 函数sort()会修改序列,但是不返回任何值
x=[8,9,0,7,4,5,1,2,3,6]
y=x.sort()
print(y) # None
print(x) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1.4 如果不想排序修改原序列 而且还要有返回值的话可以用sorted函数
1.5 sort() 搭配参数使用
(1) key参数
key接受的是一个只有一个形参的函数
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
x=[8,9,0,7,4,5,1,2,3,6]
def size(a):
x=10-int(a)
return x
x.sort(key=size)
print(x)
(2)reverse参数
reverse=True :降序
reverse=False : 升序
x=[8,9,0,7,4,5,1,2,3,6]
x.sort(reverse=True)
print(x) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
x.sort(reverse=False)
print(x) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2.1 sorted()函数可以对所有可迭代的对象进行排序操作
2.2 sorted()函数是一个内置函数,可以直接使用
2.3 sorted()函数语法:sorted(iterable, cmp=None, key=None, reverse=False)
cmp :可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key : 主要是用来进行比较的元素,只有一个参数,具体的函数的
参数就是取自于可迭代对象中,指定可迭代对象中的一个元
素来进行排序。
reverse :排序规则,reverse = True 降序, reverse = False 升序(默认)
iterable:迭代对象
2.4 sorted()函数不会影响迭代对象本身,会有返回值(和sort函数最大的区别)
2.5 简单使用
def sortedx(x):
return x[0]
wlist=[(1,"a"),(3,"b"),(2,"c"),(4,"d")]
print(list(sorted(wlist,key=sortedx,reverse=False)))
# [(1, 'a'), (2, 'c'), (3, 'b'), (4, 'd')]
很多友友包括我自己之前也有这样的疑问,你说python多好,一个sorted函数,感觉就能解决所有排序问题了,但是事实真的如此吗?现在之所以觉得sorted函数好用的大部分原因还是归结于数据量,数据量没到一定层次当然你肉眼是感受不出来sorted函数的效率的,让我们看看chatgpt怎么说的吧:
Python 内置的 sorted()
函数使用的是 Timsort 算法,它是一种结合了归并排序和插入排序思想的稳定排序算法。它的时间复杂度在最坏情况下为 O(n\log n)O(nlogn),并且对于有序或部分有序的数组具有较高的效率。
快速排序也是一种常用的排序算法,在大多数情况下排序速度非常快,其平均时间复杂度为 O(n\log n)O(nlogn),最坏情况下的时间复杂度为 O(n^2)O(n2)。但在最优情况下(即数据已经有序),快速排序的时间复杂度甚至可以达到 O(n)O(n),比 Timsort 更快。
因此,总体而言,Timsort 相对于快速排序来说可能略慢一些,但它基本上能保证在所有情况下的稳定性和最差情况下的时间复杂度。而且,对于小规模的数据集,Timsort 采用插入排序可以更快地完成排序。所以,Timsort 在实际使用中非常常见,也是 Python 建议使用的默认排序算法。
思路教学:传送锚点
python代码实现:
#encoding=utf-8
def position(a,low,high):
#取出a[low]位置元素作为比较位置pivots元素
pivots = a[low]
#比较过程
while lowpivots):
high-=1
#当a[high]pivots
while(lowpivots时就把a[low]放在a[high]所在位置上
a[high]=a[low]
#low = high 了
a[low]=pivots
return low
def quicksort(a,low,high):
if (low