侧边栏壁纸
博主头像
BvBeJ的小站 博主等级

行动起来,活在当下

  • 累计撰写 23 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

七种经典排序算法的稳定性

BvBeJ
2025-03-30 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

以下是七种经典排序算法及其稳定性的详细说明:


一、直接插入排序

稳定性:​稳定
说明
直接插入排序通过将元素逐个插入已排序序列的正确位置,且插入时若遇到相等元素,会保持原有顺序不变。例如,在插入过程中,若发现已排序部分存在与当前元素相等的值,新元素会被插入到这些相等元素的右侧,因此不会破坏稳定性。


二、希尔排序

稳定性:​不稳定
说明
希尔排序是对直接插入排序的改进,通过分组插入排序。由于分组后元素可能跨越多个位置移动,导致相同元素的相对顺序被打破。例如,若两个相等的元素被分到不同组,排序后它们的相对位置可能改变。


三、冒泡排序

稳定性:​稳定
说明
冒泡排序通过相邻元素比较和交换实现排序。若相邻元素相等则不会交换,因此相等元素的相对顺序保持不变。例如,序列 [5, 2, 2, 3] 排序后仍保持两个 2 的原始顺序。


四、快速排序

稳定性:​不稳定
说明
快速排序的分区操作可能导致相同元素的位置变化。例如,选择基准元素时,若将右侧的相等元素交换到左侧,会破坏稳定性。此外,递归过程中元素多次交换也会影响顺序。


五、直接选择排序

稳定性:​不稳定
说明
直接选择排序在每轮选择最小值时,可能将后续的相等元素提前到前面。例如,序列 [3A, 2, 3B, 1] 排序后可能变为 [1, 2, 3B, 3A],导致相同元素 3A3B 的相对顺序改变。


六、堆排序

稳定性:​不稳定
说明
堆排序在构建最大堆或最小堆时,父子节点的交换可能打乱相同元素的顺序。例如,若父节点与子节点值相等,但子节点位于右侧,调整堆结构时可能导致右侧元素被交换到左侧。


七、基数排序

稳定性:​稳定
说明
基数排序按位分配元素到桶中,再按顺序收集。例如,按个位排序后,十位排序时若两个元素的十位相同,则个位较小的元素仍保持在前,因此稳定性得以保留。


稳定性对比表

排序算法 稳定性 关键原因
直接插入排序 稳定 插入时保持相等元素的相对顺序
希尔排序 不稳定 分组插入导致跨越移动
冒泡排序 稳定 相邻相等元素不交换
快速排序 不稳定 分区操作和递归交换破坏顺序
直接选择排序 不稳定 选择最小值时可能交换后续相等元素
堆排序 不稳定 堆调整时父子节点交换破坏顺序
基数排序 稳定 按位分配和收集时保留原始顺序

关键补充

  1. 稳定性定义:若排序后相等元素的相对位置与原始序列一致,则为稳定排序,否则为不稳定。
  2. 应用场景
    • 稳定算法适合需要保留原始顺序的场景(如按多字段排序)。
    • 不稳定算法在数据规模大或对稳定性无要求时效率更高。

如需进一步了解具体算法步骤或代码实现,可参考对应文献。

0

评论区