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中二维阵列的变换实例
Oct 09 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
用Python脚本来删除指定容量以上的文件的教程
May 04 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
总结Python使用过程中的bug
Jun 18 Python
Python中time标准库的使用教程
Apr 13 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
js获取class的所有元素
2013/03/28 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python操作gmail实例
2015/01/14 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python装饰器原理与用法分析
2018/04/30 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
自我评价正确写法范文
2013/12/10 职场文书
农林环境专业求职信
2014/03/13 职场文书
商务英语专业求职信
2014/06/26 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
小学生教师节广播稿
2015/08/19 职场文书
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python