python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)
快速排序
快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般需要每次划分的左右两边元素个数为1个和n-1个 比如已排好序的数组。大部分的情况都会是大致均匀划分的情况。
原理讲解
基于分治法,快速排序操作步骤如下:
1. 选择一个基准值(pivot) 在这里 我选择列表第一个元素作为基准值
2.将数组中比pivot小于或者等于的元素交换到pivot前面;将比pivot大于的元素交换到pivot后面
3.将已经分好的两个左右子列表 重复2操作
Python实现
1 defgetIndex(arr, l, r):2 tmp = arr[l] #10
3 while (l
6 arr[l] =arr[r]7 while (l=arr[l]):8 l += 1
9 arr[r] =arr[l]10 arr[l] =tmp11 returnl12
13 defQuickSort(arr, l, r):14 if l<15 index="getIndex(arr," l r quicksort index-1>
19 if __name__ == '__main__':20 Arr = [10, 20, 30, 40 ,50]21 QuickSort(Arr, 0, len(Arr)-1)22 print(Arr)
时间、空间复杂度;稳定性分析
时间复杂度:平均时间复杂度为O(nlogn); 最好O(nlogn) 最差O(n*n). 最理想的情况就是每次折半时都能够分成均匀的两半。最差的情况是每次折半只确定一个元素的位置结果就是要分n次
空间复杂度:代码没有显示开辟新内存 所以O(1) 但是在递归过程中会在后台利用队栈空间存储递归过程中的临时变量 分治的时候用到了递归 所以平均为O(1*logn). 最差是O(n)
稳定性:快速排序为不稳定排序 在交换元素过程中相同元素顺序会发生改变。例如:列表[3,4,5,3,2], 两个3的顺序就会在交换过程发生改变
总结
刚刚写技术博客 每一次写都比预算要的时间要长 而且博客的质量也很一般 但是 无论再精致的博客 也是从开始一篇篇累积一点点成长 到最后写一篇技术博客 用时固定 而且质量高。我唯一要做的就是坚持下去不间断。加油!
15>
python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)相关推荐
- python学习详解_深入解析Python小白学习【操作列表】
1.遍历列表 需要对列表中的每个元素都执行相同的操作时,可使用for 循环: magicians = ['alice','david','carolina'] for magician in magi ...
- python argv 详解_对python中的argv和argc使用详解
主要问题 为什么argv中第一个,即index=0的内容就是文件名? python中argc是用什么实现的? 概念解释 argc:argument counter,命令行参数个数 argv:argum ...
- mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...
数据结构与算法Python版-中国大学mooc-试题题目及答案 更多相关问题 婴儿出生一两天后就有笑的反应,这种笑的反应属于(). [判断题]填制原始凭证,汉字大写金额数字一律用正楷或草书书写,汉字大 ...
- python语法详解_关于python:NLTK中解析的英语语法
是否有可以立即使用并可以在NLTK中使用的即用型英语语法? 我搜索了使用NLTK进行解析的示例,但似乎我必须在解析句子之前手动指定语法. 非常感谢! 您可以看一下pyStatParser,这是一个简单 ...
- 100行的python作品详解_漫画喵的100行Python代码逆袭
小喵的唠叨话:这次的博客,讲的是使用python编写一个爬虫工具.为什么要写这个爬虫呢?原因是小喵在看完<极黑的布伦希尔特>这个动画之后,又想看看漫画,结果发现各大APP都没有资源,最终好 ...
- python解释器详解_浅析Python解释器的设计(一)
一些铺垫(扯淡) 历史上,在Python 2.4以及之前的版本,py代码的执行,也就是从源码到bytecode分为两步: 解析py源码成为分析树 (Parser/pgen.c)基于分析树优化缩减byt ...
- 2接口详解_冯博琴微型计算机原理与接口技术第3版答案资料配套题库名校考研真题课后习题章节题库模拟试题...
冯博琴<微型计算机原理与接口技术>(第3版)配套题库[名校考研真题+课后习题+章节题库+模拟试题] 第一部分 名校考研真题 第1章 微型计算机基础概论 第2章 微处理器与总线 第3章 80 ...
- python100例详解-几个小例子给你讲解Python中类的描述符
原标题:几个小例子给你讲解Python中类的描述符 学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Deor(描述符)特性可以排得上号. 描述符是Python 语言独 ...
- python基本词汇的特点_开课吧老师为你讲解 Python都有什么优点?
前两天刷微博的时候看到了一篇非常励志的新闻,给大家分享一下.最近北京大学举办了一场"争做数一数二的保安员"评选会,20名来自各岗位的保安员进行了现场汇报.其中,保安小哥许文龙考上本 ...
最新文章
- Git之提交项目到远程github
- 【建议收藏】复盘:2021年最新、最全、最实用的Android岗学习资料/面试真题
- eclipse 将javaWeb项目转化成maven项目
- 事务的传播性和隔离级别
- mysql c webservice_如何编写webservice c
- linux 进程重启脚本
- 《Java开发手册》阅读笔记(三)
- java通过mysql验证登录注册范例
- Git管理多个远程分支
- python的menu_Python Tkinter Menu使用教程 | 學步園
- 【爬虫】python 微博评论数据分析
- FPGA数字信号处理之乘法器
- JavaWeb--用户注册登录案例
- Image-Line升级FL Studio21水果DAW音乐工作站
- webshell、木马与后门之间的区别
- 跟我一起编辑直播源码,直播app代码怎么写
- 京东Java岗:来自面试官的夺命连环56问,你怀疑人生了吗?
- windows更改pip源_Windows下更改pip镜像源
- sicily 1206水题
- Phenix图文流程:使用docking解决Cryo-EM数据的结构问题
热门文章
- RFID生产现场管理解决方案产生背景
- SpringBoot:LoggingException: log4j-slf4j-impl
- (附源码)springboot大学生兼职网站开发与设计 毕业设计311734
- 使用vscode编码器统计代码行数
- 图片上传裁剪插件cropper.js的API详解
- 使用计算机先按ON键,计算机VF笔试题目及答案(一)..doc
- 用java写一个脚本,常用的一些方法。
- 两个月后,84年工龄的财团天王也要谢幕了
- SU(Seismic Unix)画图函数supsimage使用方法
- 微信小程序 设置cookie-保持会话持久-免登录