pythonsort函数和快排哪个快_荐python算法实践——快速排序

本文介绍了快速排序算法的思想和实现过程,通过Python代码展示了如何进行快排,并对比了其与sort函数的效率。文章适合对算法感兴趣的Python初学者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QQ:3020889729 小蔡

特别声明

本文采用jupyter notebook演示,请注意移植代码的整合问题。

排序优点

序号

优点

1

时间和内存使用良好,排序效果好。(在小数据排序时,冒泡可以替换)

2

是一种二分思想的体现,是二分堆排序学习的引导

算法思想

1.从一段需要排序的数据中选出基数

2.然后从两边开始按指定规则检测:从左到右为检测比基数(4)大的数,然后停下;从右到左为检测比基数(4)小的数,然后停下。将这两个交换后,继续检测操作——知道左右检测到同一个元素时,将基数与该元素交换,即完成一轮元素快排。

3.从以上图示可知,最终排序的数据会变成一个个确定的基数,进而完成排序。(算法实现采用递归完成,破除条件就是,左检测的下标等于右检测下标(不允许左检测大于右检测))

代码实现

处理输入数据

# 不定长数据排序

a = input("请输入待排序数据:").split(' ')

a = [int(x) for x in a] # 数据类型转换

n = len(a) # 数据长度

结果展示:

定义快排函数

提示:该函数调用全局的a变量

def quicksort(left, right): # 传入快排的起止下标

'''函数说明:

1.函数内采用全局变量实现数据修改

2.递归破除条件为左检测越过右检测时

3.每一次新划分总是从左边开始新的递归,再进行右部分的递归

'''

if left > right: # 递归破除条件:当左检测标号left》right时,破出

return

i = left # 快排的左下标,也是基数的下标

j = right # 快排的尾下标

t = a[left] # 基数值

while i != j: # 进行快排

while a[j] >= t and i < j: # 每一次快排总是先从右边开始检测小于基数的元素,否则标号减1

j -= 1

while a[i] <= t and i < j: # 检测大于基数的元素,否则标号加1

i += 1

if i < j: # 经过检测之后,如果此时的左右标号满足条件,就进行数据交换

temp = a[i]

a[i] = a[j]

a[j] = temp

a[left] = a[i] # 完成一次基数的排序,将基数和本次排序得到的中段值交换

a[i] = t

quicksort(left, i-1) # 通过递归实现整个排序,总是从每一次新划分的左边开始递归

quicksort(i+1, right) # 右划分递归

调用该函数,显示结果:

快排函数的输入参数修改

'''函数修改说明:

1.基于全局变量来定义函数在使用上不适合交互,所以改写为传入代排序数据

2.其余操作不变

'''

def quicksort_2(data, left, right):

if left > right:

return

i = left

j = right

t = data[left]

while i != j:

while data[j] >= t and i < j:

j -= 1

while data[i] <= t and i < j:

i += 1

if i < j:

temp = data[i]

data[i] = data[j]

data[j] = temp

data[left] = data[i]

data[i] = t

quicksort_2(data, left, i-1)

quicksort_2(data, i+1, right)

return data

调用函数的结果展示:

原文链接:https://blog.csdn.net/weixin_44604887/article/details/106364142

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值