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

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

即在原序列中,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 的相对前后位置来说,经过排序后,就会有两种可能的结果。

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


A、B 的相对位置没变。

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

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

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

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


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

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

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

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

怎样的排序算法才算稳定?相关推荐

  1. std中稳定排序算法_排序算法问题:稳定排序与不稳定排序

    (给算法爱好者加星标,修炼编程内功) 作者:紫红的泪 https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 前言 排 ...

  2. 一个交易系统需要经过几年的考验才算成功的交易系统,盈利需要几年才算稳定?

    来源: 汇商琅琊榜APP 原文连接:https://mp.weixin.qq.com/s/V1atq2G83qX2XUEayGRtBw 我认为研发一个好的交易系统需要从三方面考虑: 交易系统规则符合盈 ...

  3. 九大排序算法,你会几个?

    概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则 ...

  4. 九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  5. 这些排序算法的使用时机,你都知道吗?

    转载自   这些排序算法的使用时机,你都知道吗? 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存 ...

  6. 超全十大经典排序算法及其分析

    文章目录 0.算法概述 0.1 算法分类 0.2 算法复杂度 0.3 相关概念 1. 冒泡排序(Bubble Sort) 1.1 算法描述: 1.2 图解演示 1.3 代码实现 1.4 优化过程 1. ...

  7. 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数

    八大排序算法 发表于2012/7/23 16:45:18  662397人阅读 分类: c/c++ 数据结构与算法 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排 ...

  8. 【编程练习】八大排序算法

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  9. 八大排序算法总结以及python实现

    原址 一.概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. ...

最新文章

  1. 华为自动驾驶实车实路测试视频曝光!
  2. 在唯一密钥属性“name”设置为“Application”时,无法添加类型为“add”的重复集合项...
  3. C++中出现一排金字塔符号_看懂施工图中的钢筋标注,真没你想的那么难
  4. Android模拟器无法上网问题
  5. 不同视图间的跳转方式
  6. Windows配置本地域名
  7. mysql limit的使用方法
  8. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  9. python threading类重写_python下threading模块使用的注意点
  10. JS:ES6-1 let 关键字
  11. 如何在windows2003(IIS6)下配置IIS,使其支持cshtml
  12. 小学五年级计算机考试试题,小学信息技术考试题库中五年级试题——选择题
  13. 2020中国数据智能产业图谱1.0版发布丨数据猿产业全景图
  14. java商城加入购物车接口实现_商城系统购物车功能分析实现
  15. 麒麟座IIC-STM32F103RET6(2)-完成US延时
  16. P1551 亲戚 并查集
  17. 单页应用首屏加载速度慢怎么解决?
  18. HC32L136/HC32L176开发之硬件IIC驱动AT24C64
  19. vivox21支持html,vivo X21支持双卡吗_vivo X21支持双卡双待吗-太平洋IT百科手机版
  20. mysql 空集 赋值_如何在MySQL查询中替换“空集”?

热门文章

  1. 请放弃使用付费软件,免费好用抢票软件,开心回家
  2. default web site(已停止)无法启动的解决思路
  3. PHP Mac composer 安装 valet
  4. js 控制浏览器 实现全屏 和 退出全屏功能
  5. 【JoJo的摄影笔记】伪装成道歉信的序言
  6. linux下给文件特殊行固定列后面添加字符
  7. ASP.NET—015:ASP.NET中无刷新页面实现
  8. 卸载浪潮安装的 IP-GUARD 监控软件
  9. 5本好书,锻炼你的创意思维
  10. 打磨机器人最重要的部件—柔性力控打磨工具