冒泡和快速排序的时间复杂度_各种排序算法总结
各种排序算法的稳定性,时间复杂度和空间复杂度总结:
![](/assets/blank.gif)
我们比较时间复杂度函数的情况:
![](/assets/blank.gif)
时间复杂度函数O(n)的增长情况:
![](/assets/blank.gif)
所以对于n较大的排序记,一般的选择都是时间复杂度为O(nlog2n)的排序方法。
时间复杂度来说:
1.平方阶O(n2)排序
各类简单排序:直接插入排序,直接选择排序和冒泡排序;
2.线性对数阶O(nlog2n)排序
快速排序、堆排序和归并排序;
3.O(n1+§)排序,§是介于0和1之间的整数。
希尔排序;
4.线性阶O(n)排序
基数排序,此外还有桶、箱排序。
5.说明
当原表有序或基本有序时,直接插入排序和冒泡排序将大大减少比较次数和移动记录的次数,时间复杂度可降至O(n);
而快速排序则相反,当原表基本有序时,将蜕化为冒泡排序,时间复杂度提高为O(n2);
表是否有序,对简单选择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。
稳定性来说:
1.排序算法的稳定性:若待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对次序发生了改变,而称该算法是不稳定的。
2.稳定性的好处:排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。另外,如果排序算法稳定,可以便面多余的比较;
3.稳定的排序算法:冒泡排序,直接插入排序,归并排序和基数排序;
4.不稳定的排序算法:选择排序,快速排序,希尔排序,堆排序;
选择排序算法的准则和依据:
1.准则:每种排序算法都各有优缺点。因此,在实用时需根据不同情况适当选用,甚至可以将多种方法结合起来使用。
2.依据:影响排序算法的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时还得考虑它的可读性,以利于软件的维护。一般而言,需考虑的因素有以下4点:
1.待排序的记录数目n的大小;
2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小;
3.关键字的结构及其分布情况;
4.对排序稳定性的要求。
设待排序元素的个数为n。
1.当n较大,则因采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序;
快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序:如果内存空间允许切要求稳定性的;
归并排序:它有一定数量的数据移动,所以我们可以与插入排序结合,先获得一定长度的序列,然后再合并,在效率上有所提高。
2.当n较小,可采用直接插入或直接选择排序。
直接插入排序:当元素分布有序,直接插入排序将大大减少比较次数和移动记录的次数。
直接选择排序:元素分布有序,如果不要求稳定性,选直接选择排序。
3.一般不使用或不直接使用传统的冒泡排序。
4.基数排序:它是一种稳定的排序算法,但有一定的局限性:
关键字可分解
记录的关键字位数较少,如果密集更好
如果是数字时,最好是无符号的,否则将增加相关的映射复杂度,可先将其正负分开排序。
冒泡和快速排序的时间复杂度_各种排序算法总结相关推荐
- 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...
- 冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序
周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...
- 冒泡和快速排序的时间复杂度_「排序」冒泡排序、快速排序—图解+手撕
前言 无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习交换类排序--冒泡和快排详解! 在排序中,冒泡和快排是考 ...
- 冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...
八大排序算法 一.直接插入 1.基本思路 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环 ...
- 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 冒泡和快速排序的时间复杂度_十大经典排序算法——快速排序
目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a ...
- 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)
本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...
- pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现
递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...
- 冒泡和快速排序的时间复杂度_凡人能看懂的冒泡排序和快速排序
这是第一篇公众号文章,所以内容打算写的浅简一点. 这篇文章将主要介绍两种非常普遍的排序方式:冒泡排序和快速排序.内容包括两种排序的原理,代码剖析,以及时间复杂度分析. 因为注意到很多快排的文章在介绍完 ...
最新文章
- VA02修改销售订单的BAPI举例
- wxWidgets:弹出 wxWidgets 示例
- nmap脚本使用总结
- Linux函数--inet_pton / inet_ntop
- 关于mybatis的association和collection主键映射问题
- 吴恩达《机器学习训练秘籍》中文版58章节完整开源
- 在c语言中定义共用型数据类型的关键字是,C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键...
- python3安装与环境配置和pip的基本使用
- SECS/GEM协议开发应用
- Detours学习之三:使用Detours
- web前端人事面试常问问题
- 社招看这里: 高级开发工程师/技术专家 [组内直推]
- 中国计算机软件行业分析4---外企的商业贿赂
- 姿态估计论文思路整理 -- Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
- 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报... 1
- 安徽大学计算机学院张兴义教授,CCF YOCSEF合肥与CCF合肥分部联合成功举办 “2018CCF合肥为新研究生导航”活动...
- android隐藏系统ui_如何在非库存设备上获取Android的系统UI调谐器
- 华汇超市二层的小餐馆可当MBA案例了
- 关于FlowPlayer视频播放问题
- 巧用Excel VBA进行考试成绩登分录入