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实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
python表格存取的方法
Mar 07 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python看某个模块的版本方法
Oct 16 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python反转列表的三种方式解析
Nov 08 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 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语法速查表
2007/01/02 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python抓取网页中的图片示例
2014/02/28 Python
itchat接口使用示例
2017/10/23 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python移位运算的实现
2019/07/15 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
护理专业自荐信
2013/12/03 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
校园环保建议书
2014/05/14 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
大学校园招聘会感想
2015/08/10 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书