python 快速排序

快排讲解视频
基本思路: 就是每次一趟排序需要达到一个效果,就是开始排序前选定一个数,排序后,这个数字左边的都比它小或者相等,右边的都比它大或者相等。
达到这个效果后,就可以递归执行了,将该数的左右区间递归执行,最终就可以排好了。
每一趟排序的基本方法:
假定需要排序的区间是[left, right],选定一个数字(key)可以随机也可以选择区间左边第一个数字,设置一个l指针指向区间最左端(=left)和一个r指针(=right),然后开始循环判断,将r指针向左移动,当指向的数字小于key时,停止移动,将l向右移动,当指向的值大于key时停止移动,并将l和r指向的值交换,然后重复前面的操作,直至 l = r时结束。
python代码:

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        if k == 0 or arr == []:
            return []
        def sort(left, right):
            if left >= right:
                return
            l = left
            r = right
            key = arr[left]  
            # 进行一次排序:  
            while l < r:
                while r > l and arr[r] >= key:
                    r -= 1
                while l < r and arr[l] <= key:
                    l += 1
                arr[l], arr[r] = arr[r], arr[l]
            arr[l], arr[left] = arr[left], arr[l]
            # 递归排序
            sort(left, l-1)
            sort(l + 1, right)
        sort(0, len(arr)-1)
        return arr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ystraw_ah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值