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计算最大优先级队列实例
Dec 18 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python计算圆周率pi的方法
Jul 11 Python
浅谈python中set使用
Jun 30 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
带你认识Django
Jan 15 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
python源码剖析之PyObject详解
May 18 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创建Cookie数组的详解
2013/07/03 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
js类型检查实现代码
2010/10/29 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
Python实现图像几何变换
2015/07/06 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
python-opencv颜色提取分割方法
2018/12/08 Python
python 通过exifread读取照片信息
2020/12/24 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
装修致歉信
2014/01/15 职场文书
小区文明倡议书
2014/05/16 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
员工自我评价范文
2015/03/11 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python
git stash(储藏)的用法总结
2022/06/25 Servers