Python快速排序算法实例分析
作者:qlshine 发布时间:2021-10-23 09:14:37
标签:Python,快速排序,算法
本文实例讲述了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]
"""
运行结果:
PS:关于排序算法的详细说明还可参考本站在线工具:
在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具
http://tools.jb51.net/aideddesign/paixu_ys
希望本文所述对大家Python程序设计有所帮助。
来源:http://www.cnblogs.com/qlshine/p/6032111.html


猜你喜欢
- 本文实例为大家分享了JS实现用户管理系统的具体代码,供大家参考,具体内容如下效果图:html代码: <h1>
- 这篇文章主要介绍了python导入不同目录下的自定义模块过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 校勘(collation)是指对代码页、字母大小写、音调、语言和字母表的整理,很多校勘都是在数据进入数据库之前进行的,根据我的经验,北美的大
- 在上一篇文章中,我们讲了如何在linux上用python写一个守护进程。主要原理是利用linux的fork函数来创建一个进程,然后退出父进程
- 最近做个软件,用PyQT写的,在实现菜单栏点击弹出新窗口的时候严重被卡壳,发现用WxPython的思想和方式来做完全无法实现。PyQT的中文
- 本文使用的是163邮件进行测试。注:163邮箱现在需要使用 客户端授权码 进行测试,不再支持邮箱密码进行测试。 
- 前言众所周知vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的。相对来
- tensorflow支持14种不同的类型,主要包括:实数:tf.float32 tf.float64整数:tf.int8 tf.int16
- 安装pip install pyshp引入import shapefile读取sf=shapefile.Reader("{路径名}
- 引言在做接口测试的时候,我们不仅需要将测试结果以报告的形式展示,还需要将测试结果以邮件的形式发送到需要知道的人手中。那么如何发送邮件呢?邮件
- 一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统
- 1.0tensorflow的安装1.1安装pythonpython下载 需要python3.x<=3.7https://www.pyt
- 本文实例为大家分享了python实现简单颜色识别程序的具体代码,供大家参考,具体内容如下import numpy as npimport c
- 关于oracle 优化的内容很多,概念庞杂,不过可以总结出一个大纲性的东西作为需要考虑的方向,然后再逐步细化。oracle优化按重要性需要考
- 因为云服务器的centos是没有图形界面的,所以安装比较麻烦,刚好19c有本地rpm的安装方法,所以推荐用rpm安装。首先到官网下载rpm包
- MySQL中,常常会看到一些关于动态字符串的处理,列如:DYNAMIC_STRING。为了记录动态字符串的实际长度,缓冲区的最大长度,以及每
- 前言在开发过程中,很多应用程序都需要通过邮件提醒用户, Flask 的扩展包 Flask - Mail 通过包装了 Python 内置的sm
- 由于想要使用pycharm连接Window子系统Ubuntu进行开发,找了很多教程都不够详细,花了点儿时间,最后配置成功。将pycharm连
- 大数据一般是在“云”上玩的,但“云”都是要钱的,而且数据上上下下的也比较麻烦。所以,在本地电脑上快速处理数据的技能还是要的。pandas在比
- 示例代码,用到了函数substr与iconv_substr,mb_substr<html><head><met