快速排序——————递归算法

python的快速排序

一、定义

快速排序原理:从一个数组中任意挑选一个元素(通常为最左边的元素)作为基准数,
将剩下的元素和基准数进行比较,将小于等于中轴元素的放到基准数的左边,经大于
中轴元素的放到基准数的右边,然后以当前基准数的位置为界,将左半部分数组和右
半部分数组堪称两个新的数组,重复上述操作,直到子数组的元素个数小于等于1.

二、推理

选一个作为分界的位置,选一个划分的位置,设定排序条件。本文选择最右边作为分界值,最左边最为划分的位置,从左边第一个元素开始一直到倒数第二个为止,逐一和分界值进行比较,大于分界值的数字不做任何修改,小于分界值的元素与划分的位置交换,划分位置后移移位,直到全部比完,第一轮结束,一直到左、右部分的数组内个数小于等于1时,快速排序完成。

三、代码

lista = [1,5,8,34,19,20,33,11]      #定义排序的序列
def quikSwith(listArr,left,right):      #定义比较与交换的函数
    '''
    @参数:listArr是需要排序的列表
           left是起始位置
           right是结束位置
    '''
    div = listArr[right]     #分界值,默认取最后一个元素,用来划分使用
    position = left    #记录划分的位置
    for i in range(left,right):    #用列表中的其他元素与分界值比较
        if listArr[i] > div:      #大于分界值,不作任何操作
            #position不变
            pass
        else:
            listArr[i],listArr[position]=listArr[position],listArr[i]     #小于分界值时,交换划分位置和元素的位置
            position += 1      #划分位置向后移一位
            pass
        print(lista)      #检验过程
        pass
    listArr[position],listArr[right]=listArr[right],listArr[position]     #退出循环后分界值与划分位置交换
    print(lista)
    return position   #返回记录的位置
    pass
def quikSort(listArr,left,right):    #定义递归函数,调用比较与交换的函数和函数自己本身。
    if left >= right:    #退出条件
        return None
    position = quikSwith(listArr,left,right)    #继续划分,直到只有一个数或没有数
    quikSort(listArr,left,position - 1)   #前半部分
    quikSort(listArr,position + 1,right)  #后半部分
    pass
print(quikSort(lista,0,len(lista)-1))     #调用函数
print(lista)     #输出结果

四、总结

快速排序有很多种方式,只要理清逻辑,就成功了一大半,还可以试试从左边开始排序或者从一个随机数开始排序。
以上内容仅供参考,切勿用于商业用途,定义内容来自万能的百度百科,其余如有雷同,纯属偶然!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值