[DnA] 快速排序

思路:

快速排序采用的是递归和分而治之的思想

代码:

def qsort(li):

    # 如果列表是空,则啥都不干
    if not li:
        return

    # 取中间位置mid及其值midvalue,或者随便取一个位置
    length = len(li)
    mid = length//2
    left = []
    right = []

    # 遍历列表,把所有小于此值的数放到左列表中,把大于此值的数放到右列表中
    midvalue = li[mid]
    for ele in li:
        if ele > midvalue:
            right.append(ele)
        if ele < midvalue:
            left.append(ele)

    # 递归调用,对左列表再进行同样的动作
    qsort(left)
    # 递归调用,对右列表在进行同样的动作
    qsort(right)

    # 把 右列表 + midvalue + 右列表 拼接起来
    tmpli = []
    tmpli.extend(left[:])
    tmpli.append(midvalue)
    tmpli.extend(right[:])
    li[:] = tmpli[:]

list =[1,4,5,7,2,3,6,9]
print(list)
qsort(list)
print(list)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值