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 相关文章推荐
Android分包MultiDex策略详解
Oct 30 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
python for 循环获取index索引的方法
Feb 01 Python
Python 学习教程之networkx
Apr 15 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
Python3批量创建Crowd用户并分配组
May 20 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
python中Django文件上传方法详解
Aug 05 Python
python闭包与引用以及需要注意的陷阱
Sep 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版自动生成文章摘要
2008/07/23 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
深入学习python的yield和generator
2016/03/10 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python3.x上post发送json数据
2018/03/04 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python内存动态分配过程详解
2019/07/15 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
机械制造毕业生求职信
2014/03/03 职场文书
学生会竞聘书范文
2014/03/31 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技