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计数排序和基数排序算法实例
Apr 25 Python
python快速查找算法应用实例
Sep 26 Python
Python多进程机制实例详解
Jul 02 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
深入探讨opencv图像矫正算法实战
May 21 Python
给numpy.array增加维度的超简单方法
Jun 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
pandas多级分组实现排序的方法
2018/04/20 Python
Python目录和文件处理总结详解
2019/09/02 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
如何用Django处理gzip数据流
2021/01/29 Python
浅析python连接数据库的重要事项
2021/02/22 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
农村婚礼证婚词
2014/01/08 职场文书
安全生产投入制度
2014/01/29 职场文书
感恩教师节主题班会
2015/08/12 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
一文带你探究MySQL中的NULL
2021/11/11 MySQL
你真的会用Mysql的explain吗
2022/03/31 MySQL