排序算法总结

| 排序算法 | 平均 时间复杂度 | 最坏 时间复杂度 | 最好 时间复杂度 | 空间复杂度 | 稳定性 |
| 希尔排序 | | | | | 不稳定 |
| 简单选择排序 | | | | | 不稳定 |
| 堆排序 | | | | | 不稳定 |
| 快速排序 | | | | | 不稳定 |
| 归并排序 | | | | | 稳定 |
| 直接插入排序 | | | | | 稳定 |

冒泡排序 稳定

排序算法的稳定性

是指将待排序列排序后,能确保排序码中的相对位置保持不变。

1.简单选择排序稳定性:

假设待排序列:(4,4,2,1)进行非降序排序:
> 第一趟排序过程:第一趟排序将最小的元素归位到第一个位置
比较 4和 4 , 4 不小于4,
比较 4和 2 ,2 小于 4, 更新未排序序列中最小元素为 2。
比较 2和 1, 1 小于 2, 更新未排序序列中最小元素为 1。
此时 1 是最小元素。
则 1 为整个未排序序列最小元素,并和第一个位置的元素交换。也就是 4 和 1 交换位置。
则第一趟排序后的序列为:(1, 4,2,4 )
> 同理,从第二个元素开始查找第二小的元素。
比较 4 和 2,2 小于 4, 更新未排序序列中最小元素为 2。
之后 2 均小于后面的所有元素,则 2 为整个未排序序列最小元素,并和第二个位置的元素
交换。也就是 4 和 2 交换位置。
则第二趟排序后的序列为:( 1,2, 4, 4 )
>同理,从第三个元素开始查找第三小的元素。
比较 4 和 4,4不小于 4 ,

第三趟:1,2,4,4

因为第三趟排序中,黑色4不比红色4小,所以不用交换。因此对比待排序列排序, 4,4的相对位置改变了,所以不稳定。
简单选择排序:共进行n-1趟排序

2.冒泡排序稳定性:

假设待排序列:(4,4,2,1)进行非降序排序
冒泡排序的基本思想是通过重复遍历待排序的数列,比较相邻元素的值,如果顺序错误就把
它们交换过来。每一轮遍历后,最大的元素会被"冒泡"到数列的末尾。对于非降序排序,即从小到大排序,较大的数值会逐渐移动到序列的右侧。
第一趟排序过程:
比较 4 和 4 ,不交换;
比较 4 和 2, 4 比 2 大,进行交换,此时序列(4,2, 4 ,1)
比较 4 和 1, 4 比 1 大,进行交换,此时序列(4,2,1, 4 )
第二趟排序过程:
比较 4 和 2 ,4 比 2 大,进行交换,此时序列(2,4,1, 4 )
比较 4 和 1,4 比 1 大,进行交换,此时序列(2,1,4, 4 )

第三趟排序过程:
比较 2 和 1 ,2 比 1 大,进行交换,此时序列(1,2,4, 4 )
所以冒泡排序 中对比 待排序列排序, 4, 4 的相对位置没改变,所以稳定。

相关推荐
一匹电信狗21 小时前
【LeetCode_547_990】并查集的应用——省份数量 + 等式方程的可满足性
c++·算法·leetcode·职场和发展·stl
鱼跃鹰飞1 天前
Leetcode会员尊享100题:270.最接近的二叉树值
数据结构·算法·leetcode
梵刹古音1 天前
【C语言】 函数基础与定义
c语言·开发语言·算法
筵陌1 天前
算法:模拟
算法
We་ct1 天前
LeetCode 205. 同构字符串:解题思路+代码优化全解析
前端·算法·leetcode·typescript
renhongxia11 天前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·深度学习·算法·机器学习·信息可视化·语言模型·逻辑回归
CoderCodingNo1 天前
【GESP】C++四级/五级练习题 luogu-P1223 排队接水
开发语言·c++·算法
民乐团扒谱机1 天前
【AI笔记】精密光时频传递技术核心内容总结
人工智能·算法·光学频率梳
CoderCodingNo1 天前
【GESP】C++五级/四级练习题 luogu-P1413 坚果保龄球
开发语言·c++·算法
2301_822366351 天前
C++中的命令模式变体
开发语言·c++·算法