思路

第一步:找到一个随机的数,一般都是第一个数,也就是left,递归中也用left,放到缓存中,专业叫 基准值,基准值是要放在中间的。

第二步:最左边空出一个位置就是索引left的位置,所以从右向左找比基准值小的索引 R ,找到并将值放在left位置,这样索引R 就会空出来。

第三步:从左向右找比基准值大的索引 L 并将值放在right的位置上。

第四步:循环到left = right,就是基准值的索引,将基准值赋值进去,并返回 基准值索引。

第五步:递归排序基准值左边的列表,

第六步:递归排序基准值右边的列表。

def quit_sort(data, left, right):
if left < right:
mid = partition(data, left, right)
quit_sort(data, left, mid - ) # 最左面到中间
quit_sort(data, mid + , right) # 中间到最后 def partition(data, left, right):
tmp = data[left]
while left < right:
# 从右找到比中间小的值的索引
while left < right and data[right] > tmp:
right -=
data[left] = data[right]
# 从左找到比中间大的索引
while left < right and data[left] < tmp:
left +=
data[right] = data[left]
data[left] = tmp
return left li = list(range())
random.shuffle(li)
print(li)
quit_sort(li,,len(li)-)
print(li)

注:python中有最大的递归层数,如果超过会报错,我们需要设置一下

import sys
sys.setrecursionlimit()

快排的时间复杂度

最好情况 O(nlongn)

一般情况 O(nlongn)

最差情况 O(n2)

最新文章

  1. mysql大表myisam的导入
  2. MySQL wamp密码修改
  3. EntityFrameWork 使用时碰到的小问题
  4. Android程序设计-RecyclerView的使用
  5. Android 摇一摇 之 传感器片
  6. Linux/Unix 怎样找出并删除某一时间点的文件(转)
  7. 第二十一课:js属性操作的兼容性问题
  8. OpenStack Cinder源代码流程简析
  9. Sherlock and Squares
  10. JS列表的下拉菜单组件(仿美化控件select)
  11. 开始更新webpack踩坑笔记
  12. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&amp;DES对称加解密
  13. 第一章 Python基本语法元素
  14. Java文件复制
  15. Qt 4.8.2.+VS2008静态编译
  16. Java-SpringMvc-响应Html代码展示
  17. web前端设计规范
  18. 【python入门】之教你编写自动获取金币脚本
  19. cocos2d-x中几种存储数据的方式
  20. HDU 1020:Encoding

热门文章

  1. c调用c++编的dll,c++调用c编写的dll,extern “C”的用法
  2. c++类static成员
  3. asp.net操作GridView添删改查的两种方法 及 光棒效果
  4. python-内置函数及捕获异常
  5. 关于Bonobo Git Server的安装
  6. Mybatis实现批量删除
  7. springboot Actuator健康检查
  8. 随笔分类 - java高级特性
  9. JavaScript高级程序设计-读书笔记(6)
  10. jquery validate检验