Python快速排序算法实例分析


Posted in Python onNovember 29, 2017

本文实例讲述了Python快速排序算法。分享给大家供大家参考,具体如下:

快速排序的时间复杂度是O(NlogN)

算法描述:

① 先从序列中取出一个数作为基准数
② 分区过程, 将比这个数大的数全部放到它的右边, 小于或等于它的数全部放到它的左边
③ 再对左右区间重复第二步, 直到各区间只有一个数

假设对 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 进行排序, 首先在这个序列中随便找一个基准数(用来参照), 比如选择 6 为基准数, 接下来把所有比基准数大的数放在6的右边, 比6小的数放在左边

原理分析:

① 选择最左边的数为基准数key
② 设立两个游标 low 和 high , 分别指向数组的最低位和最高位
③ 然后high先动, 如果high位上的数比key大, 则向前走, 如果high-1位上的数比key大, 继续向前走, 直到该位上的数<=key
④ 此时比较low位, 如果<=key, low向后走, 变为low+1, 依次类推, 直到该位上的数比key大
⑤ 交换high和low位上的数
⑥ 重复以上步骤, 直到low=high , 交换 key 和 high 位上的值
⑦ 最后进行递归操作

示例代码:

#!/usr/bin/env python
# coding:utf-8
# 设置最低位和最高位
def quickSort(nums, low, high):
  # 设置一个比较基准key
  key = nums[low]
  while low<high:
    # 如果最高位的数 大于等于 key则向前走
    while low<high and nums[high] >= key:
      high -= 1
    # 如果最低位的数 小于等于 key则向后走
    while low<high and nums[low] <= key:
      low += 1
    # 交换值
    nums[low], nums[high] = nums[high], nums[low]
  #最后low=high, 此时交换key和high位上的值, 使小于key的值在key左边, 大的在key右边
  nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]
  # 返回最低位的位置
  return low
# 进行重复操作
def interval(nums, low, high):
  if low<high:
    # 进行排序并得到最低位位置以循环操作
    key_index = quickSort(nums, low, high)
    interval(nums, low, key_index)
    interval(nums, key_index+1, high)
nums = [64,3,9,2,4,7,0,12,45,]
interval(nums, 0, len(nums)-1)
print "三水点靠木测试结果:"
print nums
"""
[0, 2, 3, 4, 7, 9, 12, 45, 64]
"""

运行结果:

Python快速排序算法实例分析

PS:关于排序算法的详细说明还可参考本站在线工具:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具
http://tools.3water.com/aideddesign/paixu_ys

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中使用Tkinter模块创建GUI程序实例
Jan 14 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
python3实现跳一跳点击跳跃
Jan 08 Python
代码分析Python地图坐标转换
Feb 08 Python
python处理数据,存进hive表的方法
Jul 04 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python 日志logging模块用法简单示例
Oct 18 Python
keras中的卷积层&amp;池化层的用法
May 22 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 Python
Python3学习urllib的使用方法示例
Nov 29 #Python
Python实现的选择排序算法示例
Nov 29 #Python
Python实现的桶排序算法示例
Nov 29 #Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 #Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 #Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 #Python
JSONLINT:python的json数据验证库实例解析
Nov 28 #Python
You might like
php字符串函数学习之strstr()
2015/03/27 PHP
php计算一个文件大小的方法
2015/03/30 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
jQuery中first()方法用法实例
2015/01/06 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
javascript生成大小写字母
2015/07/03 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python守护线程用法实例
2017/06/23 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python通过socketserver处理多个链接
2020/03/18 Python
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
特步官方商城:Xtep
2017/03/21 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
质量主管工作职责
2014/09/26 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android