怎样的排序算法才算稳定?

作者: MosesCN | 来源:发表于2018-11-15 16:15 被阅读0次

相信很多程序猿伙伴都会有意或无意用到算法,特别是排序算法,而排序算法则会涉及稳定性,那怎样的排序算法才算稳定呢?

根据百度百科给出对排序算法稳定性的简单描述,假定在待排序的记录序列中,存在多个具有相同的关键字的记录,经过排序,这些记录的相对次序保持不变。

即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的,否则称为不稳定的。

咋看上面的文字有点抽象,我们来举个栗子。

有一组待排序的序列:

int arr[] = {43,56,34,56,67,2};

其中,arr[2] 与 arr[4] 值都是 56 ,它们相等。

为了方便区分和理解,我们暂且把 arr[2] 中的 56 称为 A,arr[4] 中的 56 称为 B,效果如下

那单从 A 和 B 的相对前后位置来说,经过排序后,就会有两种可能的结果。

    A 仍然排在 B 前面,即原来 arr[2] 的 56 仍然排在 arr[4] 的 56 前面。

A、B 的相对位置没变。

经过某种排序算法排序后,结果像 1 中所述,那么称这种排序算法是稳定的。

     A 被排到 B 后面了,即原来 arr[2] 的 56 被排到了 arr[4] 的 56 后面

原来的 A、B 的相对位置改变了。

经过某种排序算法排序后,结果像 2 中所述,那么称这种排序算法是不稳定的。

简而言之,原来相同记录的相对(前后)位置,经过排序后,如果相对位置不改变,则该排序算法稳定,否则不稳定。

那常用的排序算法中,哪些是稳定的排序算法,哪些是不稳定呢?我做一个简单的思维导图。

但是要注意,排序算法是否稳定不是绝对的,排序算法是否为稳定的是由具体算法(代码)决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。

本文章首发于公众号「MoTec」,公众号定期特别推送 Java、Python 干货、一起讨论技术、思维认知、投资理财;共享网络资源,分享个人所知一切,一起成长、To Be Better。

相关文章

  • 怎样的排序算法才算稳定?

    相信很多程序猿伙伴都会有意或无意用到算法,特别是排序算法,而排序算法则会涉及稳定性,那怎样的排序算法才算稳定呢? ...

  • 金山wps笔试题目

    1.常用的排序算法有哪些?其中哪些是稳定的,哪些是不稳定的? 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算...

  • iOS-冒泡排序(Bubble Sort)

    冒泡排序 时间复杂度:O(n²)稳定性:稳定的排序算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • 排序

    排序算法比较 排序算法是否基于比较最好情况时间复杂度最坏情况时间复杂度平均情况时间复杂度是否原地排序是否稳定排序算...

  • 2019年5月份找工作面试知识点总结

    面试知识点 算法和数据结构 常用算法排序算法各种排序算法的时间复杂度,是否稳定内部排序快速排序 nlgn 不稳定冒...

  • js实现经典排序

    选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 ...

  • 第7章 算法

    排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两...

  • 排序算法

    排序算法稳定性的简单形式化定义为:如果Ai = Aj,排序前Ai在Aj之前,排序后Ai还在Aj之前,则称这种排序算...

  • 左神初级算法课程第三讲笔记-排序算法稳定性

    排序算法稳定性 排序算法稳定性:即相同的值排序后还是按照原有的次序 三个O(N): 冒泡算法:可以实现稳定性,大数...

网友评论

    本文标题:怎样的排序算法才算稳定?

    本文链接:https://www.haomeiwen.com/subject/cciyfqtx.html