快速排序图解_排序算法
1. 快速排序
- 分治思想
- 不稳定
- 时间复杂度:最差O(n^2),平均O(nlogn)
- 空间复杂度:O(n+1)
- 每次排序设置一个基准点,小于等于基准点的数放到基准点左边,大于等于基准点的数放到基准点右边。
2. 堆排序
- 完全二叉树
- 不稳定
- 时间复杂度:O(nlogn)
- 空间复杂度:O(1)
- 过程:1、初始化堆,从最后一个非叶节点开始调整,将R[0, ..., n-1]构造为堆(交换过程要检查是否保持大/小顶堆性质)2、将当前无序区的堆顶元素R[0]同该区间的最后一个记录交换,然后将新的无序区间调整为新的堆。
3. 冒泡排序
- 稳定
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。
4. 插入排序
- 稳定
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 插入排序非常类似于整理扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。
5. 选择排序
- 不稳定
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。
6. 归并排序
- 稳定
- 时间复杂度:O(nlogn)
- 空间复杂度:O(n)
- 示意图(图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园)
7. 希尔排序
- 不稳定
- 时间复杂度O(nlogn)~O(n^2)
- 空间复杂度O(1)
- 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。该方法的基本思想是:把记录按步长 gap 分组(初始gap=n/2),对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组有序记录,则完成排序。
- https://blog.csdn.net/qq_39207948/article/details/80006224
8. 桶排序
- 稳定
- 时间复杂度:O(n+nlogn-nlogm),m为桶数
- 空间复杂度:O(n+m)
- 如果相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。
- 示意图(【图解数据结构】 一组动画彻底理解桶排序)
9. 其他
内排序:在排序过程中,所有元素调到内存中进行的排序,称为内排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。
外排序:在数据量大的情况下,只能分块排序,但块与块间不能保证有序。外排序用读/写外存的次数来衡量其效率。
快速排序图解_排序算法相关推荐
- 交换排序图解_排序算法学习分享(二)交换排序---冒泡排序与快速排序
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! (一)排序的分类 排序算法 ...
- 交换排序图解_排序算法(一):初级比较排序
排序算法,作为算法中最基础的一部分.其中很多思想值得我们学习借鉴,故有必要了解.掌握一些常见常用的排序算法.排序算法根据是否使用比较元素的思想,可分为两大类:比较排序.非比较排序.本文,我们将对比较排 ...
- 实现快速排序的算法_排序算法-快速排序
快速排序是由东尼霍尔所发展的一种排序算法.在平均n个项目要Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他 Ο(nlogn) 算法更 ...
- 程序填充(指针):3数排序_排序算法之快速排序,它为什么这么快?
本文将介绍排序算法中最常用,以及最重要的快速排序. 1 快速排序实例 快速排序由C. A. R. Hoare在1960年提出,是冒泡排序的一种改进.快速排序就跟它的名字一样,效率很快.跟冒泡排序,选择 ...
- 快速排序 java导包_排序算法-快速排序(Java实现)
上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)
本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...
- python语言基本排序算法_排序算法(Python)
参考: <数据结构(Python 语言描述)> - 3.4 基本排序算法.3.5 更快的排序 Tips:为了保持简洁,每个函数都只处理整数列表,并且假设列表不为空. 目录.jpg 术语 1 ...
最新文章
- Python中字符串的截取,列表的截取
- java hasfocus_Java KeyEvent.hasNoModifiers方法代碼示例
- LeetCode 题解之Add Two Numbers II
- 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
- 『软件工程13』浅谈面向对象方法,统一建模语言UML
- ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
- bootstrap-table使用 带条件查询翻页及数据更新的问题。
- Enterprise Library 系列教程
- mybatis update返回值的意义
- Dubbo服务服务暴露之ProxyFactory Invoker
- 参数等效模型可以用于_扬声器单元的等效电路分析与应用(1)
- c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
- 【C#进阶3-4】C#设计模式
- 【AVR单片机】【Microchip Studio】01项目创建
- c语言常见运行错误提示,c语言运行时的错误提示
- 优雅的处理Exception
- CSS3简明教程-1.1.CSS3是什么
- 网页自动弹出js——你懂的
- IT30知识星球—工作报告7步曲
- [C/C++]华为8-19笔试题
热门文章
- 窃取任意GitHub Actions敏感信息如此简单,只需要分支改个名?
- AI算力的阿喀琉斯之踵:内存墙
- 读源码搞懂为什么Redis用单线程还这么快
- 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条...
- 人工智能方向改变,图灵测试是否已过时?
- JavaScript 霸榜、TypeScript 爆发、开源吞噬世界,GitHub 年度报告正式发布!
- 面试常考,项目易错!C/C++中的字节对齐
- 被遗忘的 Mozilla?
- 到底什么是“云网融合”?
- 7 面阿里,终获 Offer《原力计划【第二季】》第 9周周榜揭晓!!!