您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页python实现快速排序(凑合着看吧)

python实现快速排序(凑合着看吧)

来源:五一七教育网

1.思想:

1.取出一个元素,假如p,使得p归位,就是放到排序完成后应该在的位置

2.当p归位的时候,p左边的元素都比p小,p右边的元素到比p大

3.递归完成排序

2.算法

1.取出一个元素,使得该元素归位

2.然后返回该元素归位的位置,并依次分为左边和右边连个序列

3.然后按照左边和右边的序列,递归调用快速排序

3.代码实现:

1.首先要写出归位函数

归位函数算法思想:

归位函数:
    不断的交换要归位的数(归位数)在列表中的位置,
    1.首先要有两个下标,用来标记最左边和最右边
    2.先从右边开始交换比归位数要小的数,并且最右边的下标不断减一到右边有比归位数要小的数的下标,
        如果没有这直接退出循环,条件是最左边的小标要大于最右边的下标
    3.然后又从最左边开始交换比归位数要大的数,并且最左边的下标不断加一到左边有比归位数要大的数的下标,
        如果没有这直接退出循环,条件是最左边的小标要大于最右边的下标
    4.加入下标left < right,说明没有遍历完,接着用循环遍历第2和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] #找到右边的数比tmp小,然后交换两个数
        while left < right and li[left] <= tmp: #从左边找比tmp大的数
            left += 1
        li[right] = li[left] #找到左边的数比tmp大,交换两个数
    #这里是防止,要归位的数就是最小的时候,上面直接退出循环,而他就直接放到首位
    li[left] = tmp
    return left #返回已经归位函数的下标,然后为快速排序的的递归提供位置

2.真正的快速排序算法

def quick_sort(li, left, right):
    if left < right: #假设列表有两个元素以上
        mid= partition(li,left,right) #将元素归位,就是要排序的元素放到按顺序应该放到的位置
        #递归调用排序左边和右边的元素
        quick_sort(li,left,mid - 1)
        quick_sort(li,mid+1,right)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务