八大排序算法的时间、空间复杂度和稳定性https://www.cnblogs.com/shan333/p/15060663.html

❀八大排序算法对应的文章:

《八大排序算法之直接插入排序(教你用生活的想象,读懂插入算法) 》

《八大排序算法~希尔排序【改良版的直接插入排序】 》

《八大排序算法~冒泡排序【加变量flag的作用】 》

《八大排序算法~快速排序 》

《八大排序算法~简单选择排序【记录下标k变量的作用】 》

《八大排序算法~堆排序 》

《八大排序算法~归并排序(采用分治和递归) 》

《八大排序算法~基数排序(桶排序) 》

一,各个算法的情况与分析:

时间复杂度~一般咱就考虑平均情况就行,除非要求对时间特别苛刻才考最差情况~八大算法里就那个希尔排序跟快排时间复杂度最坏跟平均不同

1、直接插入排序 的时间和空间效率

✪ 时间复杂度:O(n2),空间复杂度:O(1); ~因为在空间上没有利用什么辅助空间~稳定

2、希尔排序 的时间跟空间效率:

✪ 时间复杂度:大约O(n1.3),空间复杂度:O(1); ~因为在空间上没有利用什么辅助空间~不稳定

不稳定的原因~假设有两个相同的数字在两个不同的子序列里边,如果每个子序列把小数扔前大数扔后,可能导致两个位置发生先后改变。

✿ 希尔排序注意点:不宜在链式结构上进行实现~因为分割的间隔d的值导致每个子序列的元素之间出现间隔,使用数组有下标可以快速找到哈!

 

3、冒泡排序 的时间跟空间效率:

✪ 时间复杂度:O(n2),空间复杂度:O(1); ~因为在空间上没有利用什么辅助空间~稳定

4、快速排序 的时间跟空间效率:

✪ 时间复杂度:O(nlog2n),空间复杂度:O(log2n); ~ ~不稳定

■为什么时间是O(nlog2n)呢? ---递归算法耗费时间:O(log2n)

---其余数跟中心点进行比较耗费时间: O(n)

■为什么空间是O(log2n)呢?----快速排序不是原地排序---递归需要用到栈,而栈的长度取决于调用的深度,平均情况是 O(log2n),最差情况是O(n)。

不稳定的原因~假设有两个相同的数字,取第一个数为中心点,当比较后会出现low=high的那个位置,导致第一个数放到low=high位置上导致两个数前后顺序发生改变。

5、简单(直接)选择排序 的时间跟空间效率:

✪ 时间复杂度:O(n2),空间复杂度:O(1); ~因为在空间上没有利用什么辅助空间~不稳定。

不稳定的原因~直接选择排序~擂台法【找小,从小到大排序】,假设有两个相同的数字,当第一个数比擂台上的数还小,则替换掉擂台上的数,然后在第二个数的后边又出现了其他比擂台的数替换掉擂台上的数,导致两个数前后顺序发生改变。

6、堆排序 的时间跟空间效率:

✪ 时间复杂度:O(nlog2n),空间复杂度:O(1); ~~因为在空间上没有利用什么辅助空间~不稳定

■为什么时间是O(nlog2n)呢? ---递归算法耗费时间:O(log2n)

---最后一个元素放到根结点后,其余元素位置需要遍历调整: O(n)。

不稳定的原因~调成成大根堆(或小根堆)时数据的调整导致相同的两个数据先后位置发生改变。

✿ 堆排序注意点:不适合待排记录个数较少的情况,对于n较大的文件还是很有效的。

7、归并排序 的时间跟空间效率:

✪ 时间复杂度:O(nlog2n),空间复杂度:O(n);  ~~稳定

■为什么时间是O(nlog2n)呢? ---递归算法耗费时间:O(log2n)趟

---所有元素都需要进行归并,每一趟都要合并n个元素: O(n)

8,基数排序(也叫桶排序)的时间跟空间效率:

✪ 时间复杂度:O(k*(n + m)),空间复杂度:O(n+m);  ~稳定

●为什么时间是O(k*(n + m))呢?

■ k 是关键字的位数的个数,例如待排数据中的最大一个数有三位数(个十百),则k=3;

■ n 是要分配n个数,m是要收集的m个数(m就是桶数,从桶中收集数据);

●为什么空间是O(n + m)呢?

■ 辅助空间是有m个桶,每个桶的深度是n;

二,总结八大算法的时间、空间效率、稳定性

引自:《数据结构c语言版严蔚敏PPT.pdf ~

https://wenku.baidu.com/view/9e73cb8b69dc5022aaea00c1.html》

,使用建议

3-1,按时间性能考虑(平均时间性能)

■      时间复杂度O(nlog2n):快排、堆排、归并~特点都用到了递归~快排最优

■      时间复杂度O(n):桶排

■      时间复杂度O(n2):冒泡、直接选择、直接插入~特点外层循环进行趟数,内循环比较个数~直接插入最优

✿ 注意:当待排记录序列按关键字顺序有序时,直接插入和冒泡排序都能到到的时间复杂度为O(n);而此时对快排是最不好的情况,导致其时间复杂度退化为O(n2);

3-2,按空间性能(辅助空间)考虑

■ 空间复杂度O(1):冒泡、简单选择、直接插入、希尔、堆排~特点是就地排序

■ 空间复杂度O(log2n):快排~因为栈所需辅助空间

■ 空间复杂度O(n):归并、桶排

3-3,按稳定性考虑(稳定性~两个相同的数据因排序导致原先的先后顺序发生改变):

■      八大排序不稳定算法: 希尔、直接选择、快排、堆排

■      其中最不稳定算法:快排、堆排

❀ 如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦,ღ( ´・ᴗ・` )比心。

八大排序算法的时间、空间复杂度和稳定性相关推荐

  1. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

    排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序:   直接插入排序    希尔排序 (插入)  冒泡排序     快速排序  (交换) 直接选择排序  ...

  2. 排序算法时间复杂度、空间复杂度、稳定性比较

    排序算法分类 排序算法比较表格填空 排序算法 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定 冒泡排序 :-----: :-–: :-–: :-–: 选择排序 :-----: :-–: :-–: ...

  3. 排序算法时间复杂度、空间复杂度、稳定性整理

    涉及排序算法包括:简单选择排序.直接插入排序.希尔排序.归并排序.冒泡排序.快速排序.堆排序.基数排序 时间复杂度:快些以nlogn的速度归队 此句表示时间复杂度为O(nlogn)的排序," ...

  4. 九大排序算法时间复杂度、空间复杂度、稳定性

    排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 冒泡排序 O(n²) O(n²) O(n) O(1) 稳定 直接选择排序 O(n²) O(n²) O(n) O(1) 不稳 ...

  5. 常用的八大排序算法时间复杂度和空间复杂度比较

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 各种内部排序按所采用的基本思想(策略)可分 ...

  6. (最全)数据结构各排序算法时间复杂度,空间复杂度,稳定性比较

    算法 时间复杂度 最好 ---------- 平均 --------- 最坏 直接插入排序 o(n)-------- o(n的平方) ----------- o(n的平方) 冒泡排序 o(n)---- ...

  7. 12八大排序算法的稳定性以及时间空间复杂度总结

    文章目录 一.排序的稳定性 二.八种排序方式的复杂度和稳定性 三.总结 一.排序的稳定性 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中 ...

  8. 八大排序算法稳定性分析

    八大排序算法稳定性分析 稳定性定义: 排序前后两个相等的数相对位置不变,则算法稳定. 稳定性的好处: 从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用. 各排序算法的稳 ...

  9. 图解八大排序算法——我见过的最详细的讲解(转)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  10. 八大排序算法图文讲解

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...

最新文章

  1. 使用adb devices命令无法识别夜神模拟器的解决方法
  2. c语言 临时文件作用,c语言函数mktemp()产生唯一临时文件名实例源码介绍
  3. Git的强制操作:强制推送[项目中千万不要用] 强制下拉
  4. CF1080F Katya and Segments Sets
  5. 2016-8-2更新日志
  6. flare3d_clone
  7. python部分引入total值的问题_Python数据分析基础与过程综述,关键数据预处理异常点的发现与处理,python,及,流程,回顾,重点,之,值...
  8. 关于注册表、组策略、设置灰色联想
  9. 从小白到大数据人工智能专家的学习历程-送100G学习资料
  10. 一个适用于visual studio 2005的一个js日历控件--zhuan
  11. 制衣软件测试自学,服装检验作业指导书.doc
  12. 论:一个草根程序员怎么进BAT??
  13. LaTeX 修改图片标题字体大小
  14. SwiftUI WWDC21 新绘图和动画组件之 01 Canvas 支持即时模式绘制的视图类型
  15. Leetcode 1647. Minimum Deletions to Make Character Frequencies Unique
  16. redis:redis的底层数据结构
  17. 万能密码或账号登录语句
  18. Tomcat课堂笔记
  19. 反射(三) 笔记
  20. Keras Adam代码解析以及EMA的Adam优化器

热门文章

  1. 海康、大华摄像头chrome高版本实时播放(java集成)
  2. opencv与vs的版本
  3. 遭遇scvhost.exe,qsetup.exe,dsound.dll,hnetcfg.dll,olepro32.dll等1
  4. PHPWAMP自启异常,服务器重启后Apache等服务不会自动重启的原因分析
  5. 推荐 10 款适合 C/C++ 开发人员的 IDE
  6. 服务器如何安装center os7系统,centeros7安装教程
  7. Center OS和Linux的区别
  8. linux ps2鼠标驱动,a1657苹果鼠标驱动 最新版:VoodooPS2Controller v1.9
  9. 数据仓库的特点、数据仓库分层、数据仓库模型
  10. 关于在Ubuntu中更新pip时遇到的问题及解决方法