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发腾讯微博代码分享
Jan 10 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python避免死锁方法实例分析
Jun 04 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
Python如何发布程序的详细教程
Oct 09 Python
python地震数据可视化详解
Jun 18 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 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 获取远程文件内容的函数代码
2010/03/24 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP时间类完整代码实例
2021/02/26 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
JavaScript 动态创建VML的方法
2009/10/14 Javascript
js计算精度问题小结
2013/04/22 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
军训 自我鉴定
2014/02/03 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
股东合作协议书
2014/04/14 职场文书
2014年销售部工作总结
2014/12/01 职场文书
工作失误检讨书
2015/01/26 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android