'''
快排的核心:使用递归
s=[3,2,1,4,5,0]
①选定坐标为0的元素作为基准元素:[3]
声明两个空列表,left=[],right=[]
将列表中除了s[0]之外的元素,分别与s[0]比较大小
小了,则放到left里面,大了则放大炮right里面
第一次拆分的结果:
[2,1,0]+[3]+[4,5]
快排的核心:使用递归
s=[3,2,1,4,5,0]
①选定坐标为0的元素作为基准元素:[3]
声明两个空列表,left=[],right=[]
将列表中除了s[0]之外的元素,分别与s[0]比较大小
小了,则放到left里面,大了则放大炮right里面
第一次拆分的结果:
[2,1,0]+[3]+[4,5]
②继续按照上面的逻辑拆分[2,1,0]和[4,5]
③[2,1,0]列表中选定坐标为0的元素:2
第二次拆分结果:
[1,0]+[2]+[]
④[1,0]列表中选定坐标为0的元素:1
第三次拆分结果:
[0]+[1]+[]
⑤继续以同样的逻辑拆分右边的列表[4,5]
[4,5]列表中选定坐标为0的元素:4
第四次拆分结果:
[]+[4]+[5]
③[2,1,0]列表中选定坐标为0的元素:2
第二次拆分结果:
[1,0]+[2]+[]
④[1,0]列表中选定坐标为0的元素:1
第三次拆分结果:
[0]+[1]+[]
⑤继续以同样的逻辑拆分右边的列表[4,5]
[4,5]列表中选定坐标为0的元素:4
第四次拆分结果:
[]+[4]+[5]
⑥全部拆分完之后开始回溯:
最终拆分后展现的结果:
[3,2,1,4,5,0]
[2,1,0]+[3]+[4,5]
[0]+[1]+[]+[2]+[]+[3]+[]+[4]+[5]
'''
最终拆分后展现的结果:
[3,2,1,4,5,0]
[2,1,0]+[3]+[4,5]
[0]+[1]+[]+[2]+[]+[3]+[]+[4]+[5]
'''
#代码实现
arr=[3,2,1,4,5,0] def quick_sort(arr): print(arr) #结束递归的条件: #当列表是空或者包含一个元素,就结束递归了 if len(arr)<=1: return arr piovt = arr[0] left = [] #小于pivot的元素,放到这里 right = [] #大于pivot的元素,放到这里 for i in arr[1:]: if i <piovt: left.append(i) elif i > piovt: right.append(i) return quick_sort(left)+[piovt]+quick_sort(right) print(quick_sort(arr))
执行结果:
E:\pytest>py -3 qucik_sort.py
[0, 1, 2, 3, 4, 5]
#时间复杂度:nlog2n
一个for循环的复杂度是n
递归的时间复杂度是log2n