avatar

目录
常见排序算法的稳定性

定义

数组arr中有若干元素,其中A元素和B元素相等,并且A元素在B元素前面,如果使用某种排序算法排序后,能够保证A元素依然在B元素的前面,可以说这个该算法是稳定的。

意义

比如手机有销量和价格,先对价格排序,再对销量排序,如果排序算法是稳定的,当两手机销量相同时,那么价格也会是有序的。

常见排序算法的稳定性

  • 冒泡排序(稳定)

    01 冒泡排序稳定性动画演示.gif

    如图所示的三个5, 他们的顺序在排序后顺序不会被打乱

  • 选择排序 (不稳定)

    02 选择排序稳定性动画演示.gif

    如图所示的三个5, 第一5会在排序后, 变成最后一个5

  • 插入排序(稳定)

    03 插入排序稳定性动画演示.gif

    如图所示的三个5, 他们的顺序在排序后顺序不会被打乱

  • 希尔排序(不稳定)

    04 希尔排序稳定性动画演示.gif

    如图所示, 同一组中相同元素, 在一轮排序中顺序不会被打乱, 但是在不同组中的相同元素, 不能保证顺序不被打乱

  • 归并排序(稳定)

    05 归并排序稳定性动画演示.gif

    如图所示的三个5, 他们的顺序在排序后顺序不会被打乱

  • 快速排序(不稳定)

    • 单边扫描

      06_02_快速排序单边扫描稳定性动画演示.gif

    • 两边扫描

      06_01快速排序两边扫描稳定性动画演示.gif

    如图所示, 所示的两个5, 他们的顺序在排序后顺序会被打乱

文章作者: Juchia Lu
文章链接: https://juchia.com/2018/11/07/%E5%B8%B8%E8%A7%81%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E7%9A%84%E7%A8%B3%E5%AE%9A%E6%80%A7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Juchia