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

简介: 八大排序算法的时间、空间复杂度和稳定性

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


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

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

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

八大排序算法~冒泡排序【加变量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 ~


66.png


,使用建议

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

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

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

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

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

 

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

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

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

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

 

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

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

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

目录
相关文章
|
2月前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
78 6
|
4月前
|
机器学习/深度学习 算法 程序员
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
本文是作者阅读《趣学算法》后的笔记,介绍了算法复杂度的基本概念,包括时间复杂度和空间复杂度的不同阶表示,并通过具体例子展示了如何计算和理解算法的效率。
69 2
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
|
2月前
|
存储 算法
算法的时间复杂度和空间复杂度
本文详细讨论了算法的时间复杂度和空间复杂度,包括它们的概念、计算方法和常见复杂度的对比,并通过多个实例解释了如何计算算法的时间和空间复杂度。
146 0
算法的时间复杂度和空间复杂度
|
2月前
|
机器学习/深度学习 存储 算法
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
|
3月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
42 4
|
3月前
|
缓存 算法 数据处理
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
在Python算法中,时间与空间复杂度的平衡至关重要。时间复杂度反映算法执行时间随输入规模的变化趋势,空间复杂度则关注额外存储空间的需求。优秀的算法需兼顾两者,如线性搜索时间复杂度为O(n),空间复杂度为O(1);二分查找在时间效率上显著提升至O(log n),空间复杂度保持为O(1);动态规划通过牺牲O(n)空间换取O(n)时间内的高效计算。实际应用中,需根据具体需求权衡,如实时数据处理重视时间效率,而嵌入式系统更关注空间节约。通过不断优化,我们能在Python中找到最佳平衡点,实现高性能程序。
79 3
|
2月前
|
算法 C语言
深入理解算法效率:时间复杂度与空间复杂度
深入理解算法效率:时间复杂度与空间复杂度
|
4月前
|
搜索推荐
九大排序算法时间复杂度、空间复杂度、稳定性
九大排序算法的时间复杂度、空间复杂度和稳定性,提供了对各种排序方法效率和特性的比较分析。
190 1
|
5月前
|
算法 搜索推荐 数据处理
震惊!Python算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
【7月更文挑战第24天】在编程世界里, Python以简洁强大备受欢迎, 但算法设计与复杂度分析对程序性能至关重要。算法是程序的灵魂, 其效率直接影响数据处理能力。时间复杂度衡量算法执行速度, 如冒泡排序O(n²)与快速排序O(n log n)的显著差异; 空间复杂度关注内存占用, 递归算法需警惕栈溢出风险。优秀算法需平衡时间和空间效率, 深入理解问题本质, 迭代优化实现高效可靠。
39 2
|
5月前
|
算法 Python
算法小白秒变高手?一文读懂Python时间复杂度与空间复杂度,效率翻倍不是梦!
【7月更文挑战第24天】在编程中,算法效率由时间复杂度(执行速度)与空间复杂度(内存消耗)决定。时间复杂度如O(n), O(n^2), O(log n),反映算法随输入增长的耗时变化;空间复杂度则衡量算法所需额外内存。案例对比线性搜索(O(n))与二分搜索(O(log n)),后者利用有序列表显著提高效率。斐波那契数列计算示例中,递归(O(n))虽简洁,但迭代(O(1))更节省空间。掌握这些,让代码性能飞跃,从小白到高手不再是梦想。
66 1
下一篇
DataWorks