快速排序(divide and conquer),D&C ,分而治之,快速排序

D&C的工作原理:
(1)找出基准条件,我一般默认第一个数为基准数
(2)确定如何缩小规模,使其符合基线条件的进行递归循环排序
例子1(无重复列表):

list = [5,6,3,8,6,9,4,3,2,1,7]   #要排序的列表

def quickly_sort(list):
    if len(list) < 2:
        return list
    else:
        jizhunshu = list[0]  #以每一次列表的第一个数为基准数
        small_list = [i for i in lists[1:] if (i < jizhunshu)]  #产生一个比基准数小的列表
        big_list = [i for i in lists[1:] if (i > jizhunshu)]   #产生一个比基准数大的表
        sort_list = quickly_sort(small_list) + [jizhunshu] + quickly_sort(big_list)          #注意基准数必须加[],使其还原为list
        return sort_list   #原列表中有2个3,排序后仅有一个3

quickly_sort(list)

在这里插入图片描述
例子2(有重复列表):

lists = [5, 6, 8, 9, 4, 3, 2, 1, 7, 3]   #要排序的列表,假设我们在例子1里列表末尾加入了一个重复数字3,利用例子1排序后,重复的数字3就被排除掉了,仅留一个3.

def quickly_sort(lists):
    if len(lists) < 2:
        return lists
    else:
        jizhunshu = lists[0]  #以每一次列表的第一个数为基准数
        small_list = [i for i in lists[1:] if (i < jizhunshu) or (i == jizhunshu)]  #产生一个比基准数小的列表,加入重复数字的录入
        big_list = [i for i in lists[1:] if i > jizhunshu ]    #产生一个比基准数大的表
        sort_list = quickly_sort(small_list) + [jizhunshu] + quickly_sort(big_list)          #注意基准数必须加[],使其还原为list
        return sort_list

quickly_sort(lists)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bio Coder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值