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 相关文章推荐
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
python脚本当作Linux中的服务启动实现方法
Jun 28 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
Python中求对数方法总结
Mar 10 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 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遍历数组的方法汇总分析
2013/06/08 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
浅谈php冒泡排序
2014/12/30 PHP
php生成圆角图片的方法
2015/04/07 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
javascript加号&quot;+&quot;的二义性说明
2013/03/04 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
jQuery 改变P标签文本值方法
2018/02/24 jQuery
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue动态改变背景图片demo分享
2018/09/13 Javascript
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
农村面貌改造提升实施方案
2014/03/18 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
授权委托书
2014/09/17 职场文书
村官个人总结范文
2015/03/03 职场文书
高中军训感想
2015/08/07 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书