快速排序算法简述及python的实现
2024-10-09 14:15:45
def kp(arr, i, j):
if i<j: #i=j时意味着一边只剩单个数据
base = kpgc(arr, i, j)
kp(arr, i, base-1) #kp(arr, i, base)也可以,相当于把base放进去重新排了一遍,但是由于base大于左边的,没什么影响
kp(arr, base+1, j) def kpgc(arr, i, j):
base = arr[i] #第一个数字作为基准数字
while i < j:
if arr[j] >= base: #当活动指针j指向数据大于或等于基准数字时,该数据未发生交叉,放右边,
j -= 1 #活动指针同时像左移
if arr[j] < base: #当活动指针j指向数据小于基准数字时,该数据发生交叉,
arr[i] = arr[j] #指向数据放左边(此时arr[i]值已被赋给base)
i += 1 #i指针向右移
arr[j] = arr[i] #为了使活动指针一直在j处,直接将i处值赋到j指针处
arr[i] = base #将基准数字放至被分两组之间
return i 将基准数字所处的索引(即位置)返回 arr = [1,3,7,8,5,6,3,4]
kp(arr,0,len(arr)-1)
print(arr)
快排算法简述:
1,先从一组数字中任意取一个基准数字(我们以第一个数字为基准数字),将剩下数字以下列方式排在基准数字两侧,左/右侧数字全小/大于基准数字
方式:除基准数字之外,指针i指向第一个数字位置,指针j指向最后一个数字位置,活动指针最开始指向j,
若r[j]大于或等于基准数字,则放于基准数字右侧,j指针左移,活动指针仍在j处,
若小于,则放于左侧,发生交叉位置互换,此时活动指针移到i处(活动指针在哪则比较哪个数字)
2,再将基准数字两侧数字分别重复1做法直到每侧都为一个数字
python的实现
主要靠递归
为了减少活动指针移动的麻烦,这里使用将i位置的值传送到j处
ps:所写都是学习笔记,非原创,但理解,不知道为什么代码老是在上面
最新文章
- ios app下载跳到itunes
- JS 样式操作学习总结。
- wordpress博客搬家心得
- Windows、Office系列产品精华部分集锦
- win7+ ubuntu 双系统
- supervisor使用,配置和安装(包括监控守护进程httpd,keepalived)
- git学习03 - 撤销修改&;删除文件
- Target优化
- django rest framework 项目创建
- CF552 E. Two Teams
- js之常见问题--for循环中为什么点击总是弹出最后一个i
- 解决element-ui upload组件报错 Avoid using non-primitive value as key, use string/number value instead
- 移动端head头部常用meta标签
- myCat知识笔记
- url最后的“/”是什么作用
- .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
- struts2值栈ValueStack中都有哪些东西?
- solr基础使用概述
- django创建model
- kitkat-s5p4418drone 记录
热门文章
- consul与springcloud整合
- SQLyog无操作一段时间后重新操作会卡死问题(解决办法)
- 牛客IOI周赛17-提高组 卷积 生成函数 多项式求逆 数列通项公式
- luogu P6570 [NOI Online #3 提高组]优秀子序列 二进制 dp
- python数据可视化编程实战PDF高清电子书
- 关于SqlServer表结构 2(回归基础)
- rabbitMQ结合spring-boot使用(1)
- Dropzone.js文件拖拽上传提示Dropzone already attached 解决
- ios数组基本用法和排序大全
- ftp服务器的安装