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:所写都是学习笔记,非原创,但理解,不知道为什么代码老是在上面

最新文章

  1. ios app下载跳到itunes
  2. JS 样式操作学习总结。
  3. wordpress博客搬家心得
  4. Windows、Office系列产品精华部分集锦
  5. win7+ ubuntu 双系统
  6. supervisor使用,配置和安装(包括监控守护进程httpd,keepalived)
  7. git学习03 - 撤销修改&amp;删除文件
  8. Target优化
  9. django rest framework 项目创建
  10. CF552 E. Two Teams
  11. js之常见问题--for循环中为什么点击总是弹出最后一个i
  12. 解决element-ui upload组件报错 Avoid using non-primitive value as key, use string/number value instead
  13. 移动端head头部常用meta标签
  14. myCat知识笔记
  15. url最后的“/”是什么作用
  16. .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
  17. struts2值栈ValueStack中都有哪些东西?
  18. solr基础使用概述
  19. django创建model
  20. kitkat-s5p4418drone 记录

热门文章

  1. consul与springcloud整合
  2. SQLyog无操作一段时间后重新操作会卡死问题(解决办法)
  3. 牛客IOI周赛17-提高组 卷积 生成函数 多项式求逆 数列通项公式
  4. luogu P6570 [NOI Online #3 提高组]优秀子序列 二进制 dp
  5. python数据可视化编程实战PDF高清电子书
  6. 关于SqlServer表结构 2(回归基础)
  7. rabbitMQ结合spring-boot使用(1)
  8. Dropzone.js文件拖拽上传提示Dropzone already attached 解决
  9. ios数组基本用法和排序大全
  10. ftp服务器的安装