快速排序的流程:
(1) 从数列中挑出一个基准值。
(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。
(3) 递归地把"基准值前面的子数列"和"基准值后面的子数列"进行排序。
主要变换过程:

代码实现过程
# 快速排序
def partition(li,left,right):
tmp = li[left]
while left < right:
while left < right and li[right] >= tmp: #从右边找比tmp小的数
right -= 1 #继续从右往左查找
li[left] = li[right] #把右边的值写到左边空位上
while left < right and li[left] <= tmp:
left += 1
li[right] = li[left] #把左边的值写到右边空位上
li[left] = tmp #把tmp归位
return left
def quick_sort(li,left,right):
if left < right :#至少两个元素
mid = partition(li,left,right)
quick_sort(li,left,mid-1)
quick_sort(li,mid+1,right)
li = [5,7,4,6,3,1,2,9,8]
quick_sort(li,0,len(li)-1)
print(li)
算法的性能
1.快速排序是一个不稳地的排序算法
2.时间复杂度:
(1)平均:O(nlogn)
(2)最差:,退化为冒泡排序
3.空间复杂度:
(1)递归调用消耗栈空间
(2)最优:O(logn)
(3)最差:O(n),退化为冒泡排序

596

被折叠的 条评论
为什么被折叠?



