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探索之pLSA实现代码
Oct 25 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 Python
Python实现随机漫步功能
Jul 09 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
python里 super类的工作原理详解
Jun 19 Python
Django中create和save方法的不同
Aug 13 Python
python生成任意频率正弦波方式
Feb 25 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
Python实现对adb命令封装
Mar 06 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 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开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
javascript匀速运动实现方法分析
2016/01/08 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
JS立即执行函数功能与用法分析
2019/01/15 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python 监测文件是否更新的方法
2019/06/10 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
高中军训感想800字
2014/02/23 职场文书
白血病募捐倡议书
2014/05/14 职场文书
开工仪式策划方案
2014/05/23 职场文书
大学军训的体会
2014/11/08 职场文书
会计专业求职信范文
2015/03/19 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
Oracle中DBLink的详细介绍
2022/04/29 Oracle
Linux磁盘管理方法介绍
2022/06/01 Servers