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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python多项式回归的实现方法
Mar 11 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Python autoescape标签用法解析
Jan 17 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
python从Oracle读取数据生成图表
Oct 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学习笔记之二 php入门知识
2011/01/12 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
python进阶教程之模块(module)介绍
2014/08/30 Python
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
团日活动策划书
2014/02/01 职场文书
军训感想500字
2014/02/20 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
二审代理词范文
2015/05/25 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
浅谈MySQL user权限表
2021/06/18 MySQL
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server