用python实现简单的快速排序

  1. 从序列中取出第一个数,作为边界条件,判断此数应该在哪个位置。用一个mid接收这个数,然后用两个游标low和high进行左右夹击,找到第一个数的具体位置,此时low=high,把mid放到这个位置

  2. 它以mid为基准,把大的换到一边,小的换到一边

在这里插入图片描述

# 快速排序
# 右标签找比mid值小的数,如果找不到,右标签向左移动,找到后该位置值和mid值位置交换(第一次时,mid值在第一位)
# 左标签找比mid值大的数,如果找不到,左标签向右移动,找到后该位置值和mid值位置交换

# 它以mid为基准,把大的换到一边,小的换到一边

# 修改迭代深度
import sys
 
sys.setrecursionlimit(1000000) #例如这里设置为十万

# 也要准备左侧标签和右侧标签
# 为什么要添加标签参数,不是内部循环用的吗?
def quick_sort(alist,start,end):
    # 如果列表里面只有一个值,直接返回列表
    if start >= end:
        return alist
    else:
        # 准备工作
        left = start  # 左标签
        right = end  # 右标签
        mid = alist[start]

        # 标签移动
        # 当left小于right时,标签移动,同时右边值大于等于mid(标签)值
        # left是左边值下标位置,right是右边值的下标位置,
        # 只有left<right时,才会做这些循环
        while left < right:
            while left < right and alist[right] >= mid:
                # 如果符合while循环,则right值往前面移动,right-1
                right -= 1
            # 当找到之后,左标签值和右标签值互换
            alist[left] = alist[right]

            # left值右移动
            while left < right and alist[left] < mid:
                # 如果符合while循环,则left值往前面移动,left+1
                left += 1
            # 当找到之后,左标签值和右标签值互换
            alist[right] = alist[left]

        # 插入mid应该在的位置(对换mid的值)
        # left,right都可以,此时两值相等
        alist[left] = mid
        # 分组进行前面两个步骤
        # 分成了两部分,左边从0到left-1的位置为一组,右边从left+1位置到最后
        # 左侧部分
        quick_sort(alist,start,left-1)
        # 右侧部分
        quick_sort(alist,left+1,end)

if __name__ == '__main__':
    alist = [1,5,94,97,6,87]
    print('开始排序')
    quick_sort(alist,0,len(alist)-1) # len(alist)-1刚好是列表最后一个元素的下标位置
    print('执行完毕')
    print(alist)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值