快速排序

快速排序:快速排序法称为分割交换排序法,也是分而治之的方式,在一个数据中找一个值,小于该值的数据放在左边,大于该值的数据放在右边,再以同样的方式处理左右两边的数据,直到排序完为止。

def quick(d):
“”“快速排序”""
if len(d) >= 2: # 递归入口及出口
mid = d[0] # 选取基准值,选取第一个元素
left, right = [], [] # 定义基准值左右两侧的列表
d.remove(mid) # 从原始数组中移除基准值
for num in d: #遍历列表d
if num >= mid: #如果列表中的值大于基准值
right.append(num) #放入right的列表中
else:
left.append(num) #放入left的列表中
return quick(left) + [mid] + quick(right)
else: #递归结束
return d

a=[30,38,28,26,27,45,35,80]
print(quick(a))

第一步:取出列表a的第一个元素30作为基准值,然后把30从列表a移除出去,依此把列表a的元素与基准值比较。小于基准值的元素放到左边列表left,大于等于基准值放入右边元素right。left=[28,26,27] 基准值30,
right=[38,45,35,80],然后利用递归分别对left[]28,26,27],[38,45,35,80]继续操作。

第二步:对左边的left=[28,26,27]进行排序,取基准值28,然后把28移除出去
与26,27比较,得到新的left=[26,27],left=[26,27]上继续操作,分到剩下一个元素26,结束,第一步左边的left=[28,26,27]排序成left=[26,27,28].

第三步:对第一步右边的right=[38,45,35,80]进行排序,取出第一个元素为基准值,得到左边left=[35],加基准值[38],加右边的[45,80].然后对[45,80]进行排序操作,得到基准值[45]加右边的[80]。依此递归后,得到[35,38,45,80].

第四步:left=[26,27,28],加基准值[30],加right=[35,38,45,80],得到整个过程排序后的列表a=[26,27,28,30,35,38,45,80]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值