速度较快-------快速排序

快速排序是速度较快的三个排序方法中比较快的.
快速排序的核心在于使元素逐个归位,然后通过递归的思想来实现.接下来我们先来了解一下什么是归位.

元素的归位

如有列表li = [5, 6, 3, 8 ,2 ,4, 3]
将第一个元素5通过调整,使位于其前面的元素都比5小,位于其后的元素都比5大,就实现了5的归位.如图:
在这里插入图片描述
这样列表被分为了左右两部分,我们现在只需要对左右两部分递归实现每个元素的归位就可以了.
那么快速排序的代码就可以写成如下:

# 假设归位函数partition函数已经实现
def quick_sort(li, left, right):
    if left < right:
        mid = partition(li, left, right)
        quick_sort(left, mid-1)
        quick_sort(li, mid+1, right)

接下来我们实现partition函数就可以:
(1)left指向5的位置,right指向列表的末尾.左边有空位则,从右边开始移动,如果right位置小于tmp,则将right位置的值放在left位置上;如果right位置上的大于等于tmp则right继续向前查找.
在这里插入图片描述
(2)此时空位在right,则从左边开始,left指向的位置大于tmp则放在right的位置上;如果小于等于tmp则继续向后寻找.
在这里插入图片描述

(3)直到left和right指向同一个位置,则此时,将5放在该位置上.
在这里插入图片描述
代码实现:

def partition(li, left, right):
    tmp = li[left]
    while left < right:
        while left < right and li[right] >= tmp:
            right -= 1
        li[left] = li[right]
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]
    li[left] = tmp

复杂度分析

平均事件复杂度为O(nlogn)
最坏的情况复杂度为O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值