各种排序算法的稳定性,时间复杂度和空间复杂度总结:

我们比较时间复杂度函数的情况:

时间复杂度函数O(n)的增长情况:

所以对于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.基数排序:它是一种稳定的排序算法,但有一定的局限性:

关键字可分解

记录的关键字位数较少,如果密集更好

如果是数字时,最好是无符号的,否则将增加相关的映射复杂度,可先将其正负分开排序。

冒泡和快速排序的时间复杂度_各种排序算法总结相关推荐

  1. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

    一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...

  2. 冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序

    周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...

  3. 冒泡和快速排序的时间复杂度_「排序」冒泡排序、快速排序—图解+手撕

    前言 无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习交换类排序--冒泡和快排详解! 在排序中,冒泡和快排是考 ...

  4. 冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...

    八大排序算法 一.直接插入 1.基本思路 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环 ...

  5. 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  6. 冒泡和快速排序的时间复杂度_十大经典排序算法——快速排序

    目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a ...

  7. 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)

    本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...

  8. pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现

    递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...

  9. 冒泡和快速排序的时间复杂度_凡人能看懂的冒泡排序和快速排序

    这是第一篇公众号文章,所以内容打算写的浅简一点. 这篇文章将主要介绍两种非常普遍的排序方式:冒泡排序和快速排序.内容包括两种排序的原理,代码剖析,以及时间复杂度分析. 因为注意到很多快排的文章在介绍完 ...

最新文章

  1. VA02修改销售订单的BAPI举例
  2. wxWidgets:弹出 wxWidgets 示例
  3. nmap脚本使用总结
  4. Linux函数--inet_pton / inet_ntop
  5. 关于mybatis的association和collection主键映射问题
  6. 吴恩达《机器学习训练秘籍》中文版58章节完整开源
  7. 在c语言中定义共用型数据类型的关键字是,C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键...
  8. python3安装与环境配置和pip的基本使用
  9. SECS/GEM协议开发应用
  10. Detours学习之三:使用Detours
  11. web前端人事面试常问问题
  12. 社招看这里: 高级开发工程师/技术专家 [组内直推]
  13. 中国计算机软件行业分析4---外企的商业贿赂
  14. 姿态估计论文思路整理 -- Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
  15. 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报... 1
  16. 安徽大学计算机学院张兴义教授,CCF YOCSEF合肥与CCF合肥分部联合成功举办 “2018CCF合肥为新研究生导航”活动...
  17. android隐藏系统ui_如何在非库存设备上获取Android的系统UI调谐器
  18. 华汇超市二层的小餐馆可当MBA案例了
  19. 关于FlowPlayer视频播放问题
  20. 巧用Excel VBA进行考试成绩登分录入

热门文章

  1. 《东周列国志》第六十九回 楚灵王挟诈灭陈蔡 晏平仲巧辩服荆蛮
  2. linux shell stty,Shell 学习(五)---stty、[[ 等
  3. tomcat启动失败处理
  4. 前端js代码实现截图功能
  5. qlist 对结构体排序
  6. Windows下Redis集群配置
  7. 【论文笔记 fintune 】羊驼
  8. Hive查询报partion错误
  9. jmeter并发测试多个用户请求一个接口
  10. java实例化对象后面添加花括号的理解分析