python 快排

博客围绕Python实现快速排序展开,快速排序是一种重要的排序算法,在信息技术领域应用广泛。借助Python语言来实现该算法,能有效解决数据排序问题,提高数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



def quick(lst, start, end):
    """
    快速排序 复杂度 N * (logN)
    原理为有两个指针:low, high 分别指向列表的第一个元素,和列表最后一个元素,和一个中间值 mid(就是取列表的第一个元素)
    一开始 low 默认情况下就指向了mid, high 指向列表最后一个元素
    [8, 3, 15, 7, 6, 2]
     |               |
    low             high
    如果high 指向的值比mid大,则high往前移动,如果high比mid 小,就把high 指向的值和low交换
    lst[low], lst[high] = lst[high], lst[low]
    如果low比mid小low往前移动一位, 如果low比mid大,则low指向的值和high 指向的值交换
    lst[high], lst[low] = lst[low], lst[high]
    当low 和 high 指针移动到相同的位置时,则mid就应该放在这个位置
    :param lst:
    :param start:
    :param end:
    :return:
    """
    if start >= end:
        return
    low = start
    high = end
    mid = lst[start]
    while low < high:
        # high > mid 往前移动 high
        while low < high and lst[high] >= mid:
            high -= 1
        lst[high], lst[low] = lst[high], lst[low]
        # low < mid 往前移动 low
        while low < high and lst[low] < mid:
            low += 1
        lst[low], lst[high] = lst[low], lst[high]
    # 当循环退出时就是 low 和 high 位置重叠的时候,mid 就应该放在这个位置
    # 然后此时以mid 为界限,左边的元素都小于mid, 右边的元素都大于mid,则我们只需要使用递归的方法排序好左边的
    # 和右边的元素即可
    lst[low] = mid
    quick(lst, start, low - 1)
    quick(lst, low + 1, end)


if __name__ == "__main__":
    ls = [22, 56, 38, 101, 1, 18, 20, 30]
    print("排序前", ls)
    quick(ls, 0, len(ls) - 1)
    print("排序后", ls)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值