快速排序

快速排序:取出列表中的第一个值,经过排序,找到他在列表中最终的位置,左边的数都小于该值,右边的数都大于该值。

为了实现这一过程,需要两个游标 low 和 high。取出的值标记为mid_value
1.取出中间值后,该值的下标为low, low

while low < high and list1[high] >= mid_value:
            high -= 1
        list1[low] = list1[high]

3.比较下标为low的值是否小于中间值,如果小于,则low += 1,游标向后走
如果大于等于中间值,则跳出循环,将下标为low的值赋给下标为high元素

while low < high and list1[low] < mid_value:
            low += 1
        list1[high] = list1[low]

4.一次循环结束后,即low>=high,就找到了列表中第一个值的位置(54)。并将该值放回到列表中的正确位置

list1[low] = mid_value

该值左边的数都小于54,右边的数都大于等于54.

这里写图片描述

接下来将数列分成两部分,小于54 和 大于等于54。使用递归再次进行排序。
小于54 的一部分中 起始位置的下标是当做是first,终止位置的下标是low-1
大于等于54 的部分,起始位置的下标是low+1,终止位置的下标是last。
再次调用函数进行排序。

又经过一次排序后,小于54那部分中的第一个数20,找到了正确的位置,大于等于54那部分中的第一个数77也找到了正确的位置。

这里写图片描述

以此类推,在对26左边部分和右边部分进行排序,对77左边部分和右边部分排序。

使用递归要写一个出口,就是当first>=last时,要返回,不能继续递归。

def quick_sort(list1, first, last):
    if first >= last:
        return
    low = first
    high = last
    mid_value = list1[first]
    while low < high:
        while low < high and list1[high] >= mid_value:
            high -= 1
        list1[low] = list1[high]

        while low < high and list1[low] < mid_value:
            low += 1
        list1[high] = list1[low]
    list1[low] = mid_value

    quick_sort(list1, first, low-1)
    quick_sort(list1, low+1, last)

list1 = [54, 26, 93, 17, 77, 31, 44, 55]
quick_sort(list1, 0, len(list1)-1)
print(list1)


>>[17, 26, 31, 44, 54, 55, 77, 93]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值