上回书说到选择排序,本篇博客介绍快速排序
参考书籍:《算法图解》
在介绍选择排序之前,先介绍递归的概念。
递归
递归函数组成部分:
- 基线条件(函数不再调用自己,从而避免形成无限循环)
- 递归条件(函数调用自己)
def fact(x):
if x == 1: #基线条件
return 1
else:
return x*fact(x-1) #递归条件
fact(5)
快速排序
思路:
-
选择数组第一个数为基准(pivot)
-
依次将数组中的数与基准比较大小,将整个数组分为比基准小的与比基准大的两组数
-
对两组数分别重复上两步操作(递归思想),直到每组数只剩下一个数为止
-
将排序后的小组依次拼接起来即成为新的有序数组
代码实现
def quicksort(array:list)->list:
if len(array)<2:
return array
else:
pivot = array[0]
less = [i for i in array[1:] if i<=pivot]
more = [i for i in array[1:] if i>pivot]
return quicksort(less) + [pivot] + quicksort(more)
quicksort([3,2,1,5,])
'''
[1,2,3,5]
'''