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 字符串操作方法大全
Mar 11 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python循环语句之break与continue的用法
Oct 14 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
python实现Decorator模式实例代码
Feb 09 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
OpenCV 图像梯度的实现方法
Jul 25 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
php fread函数使用方法总结
2019/05/28 PHP
JS 常用校验函数
2009/03/26 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
DOM 事件流详解
2015/01/20 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
python解析xml文件实例分析
2015/05/27 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
python numpy元素的区间查找方法
2018/11/14 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
户外亲子活动总结
2015/05/08 职场文书
画展观后感
2015/06/17 职场文书
我的生日感言
2015/08/03 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Golang bufio详细讲解
2022/04/21 Golang