排序算法总结

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

冒泡排序 稳定

排序算法的稳定性

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

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 的相对位置没改变,所以稳定。

相关推荐
程序员东岸13 小时前
《数据结构——排序(中)》选择与交换的艺术:从直接选择到堆排序的性能跃迁
数据结构·笔记·算法·leetcode·排序算法
程序员-King.13 小时前
day104—对向双指针—接雨水(LeetCode-42)
算法·贪心算法
神仙别闹13 小时前
基于C++实现(控制台)应用递推法完成经典型算法的应用
开发语言·c++·算法
Ayanami_Reii13 小时前
进阶数据结构应用-一个简单的整数问题2(线段树解法)
数据结构·算法·线段树·延迟标记
listhi52014 小时前
基于改进SET的时频分析MATLAB实现
开发语言·算法·matlab
Keep_Trying_Go15 小时前
基于Zero-Shot的目标计数算法详解(Open-world Text-specified Object Counting)
人工智能·pytorch·python·算法·多模态·目标统计
xl.liu15 小时前
零售行业仓库商品数据标记
算法·零售
confiself15 小时前
通义灵码分析ms-swift框架中CHORD算法实现
开发语言·算法·swift
做怪小疯子15 小时前
LeetCode 热题 100——二叉树——二叉树的层序遍历&将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
CoderYanger15 小时前
递归、搜索与回溯-记忆化搜索:38.最长递增子序列
java·算法·leetcode·1024程序员节