八大排序算法的时间、空间复杂度和稳定性
2021/7/26 11:35:32
本文主要是介绍八大排序算法的时间、空间复杂度和稳定性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
八大排序算法的时间、空间复杂度和稳定性
❀八大排序算法对应的文章:
《八大排序算法之直接插入排序(教你用生活的想象,读懂插入算法) 》
《八大排序算法~希尔排序【改良版的直接插入排序】 》
《八大排序算法~冒泡排序【加变量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,按稳定性考虑(稳定性~两个相同的数据因排序导致原先的先后顺序发生改变):
■ 八大排序不稳定算法: 希尔、直接选择、快排、堆排
■ 其中最不稳定算法:快排、堆排
这篇关于八大排序算法的时间、空间复杂度和稳定性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战