2021-07-28

快速排序

1:.快速排序思路:

  1. 取一个元素P(第一个元素),使元素P归位;
  2. 列表被P分成两部分,左边都比P小,右边都比P大;
  3. 递归完成。
    快速排序动画
    递归前使P归为
    2代码实现:

每次递归都是求出归位的指针,也就是P的位置。

然后从P位置将乱序的数组分隔成两部分,这两部分依次调用求出P指针位置的,一直分隔下去,知道排序完成。

2.1:递归的函数


def partition(li,left,right):
    tmp = li[left]
    while left<right:
        while left <right and li[right]>tmp:    #当存在右边的值比tmp大,并且有值,将右指针前移一个单位
            right -=1
        li[left] = li[right]
        while left < right and li[left]<tmp:   #当存在左边的值比tmp小,并且有值,将右指针后移一个单位
            left +=1
        li[right] = li[left]
    li[left] = tmp
    return left                               #返回privot指针.

2.2:快速排序的框架


def quick_sort(li,left,right):
    if right>left:
        mid = partition(li,left,right)
        quick_sort(li, left, mid-1)     #左边部分进行递归
        quick_sort(li, mid+1,right)     #右边部分进行递归

3:整合代码:

def partition(li,left,right):
    tmp = li[left]
    while left<right:
        while left <right and li[right]>tmp:    #当存在右边的值比tmp大,并且有值,将右指针前移一个单位
            right -=1
        li[left] = li[right]                   #把右边的值写道左边
        while left < right and li[left]<tmp:   #当存在左边的值比tmp小,并且有值,将右指针后移一个单位
            left +=1
        li[right] = li[left]                  #把左边的值写道右边
    li[left] = tmp
    return left                               #返回privot指针.

def quick_sort(li,left,right):
    if right > left:
        mid = partition(li,left,right)   
        quick_sort(li, left, mid-1)     #左边部分进行递归
        quick_sort(li, mid+1,right)     #右边部分进行递归

li = [i for i in range(50)]
import random
random.shuffle(li)
print(li)
quick_sort(li,0,len(li)-1)
print(li)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值