怎样的排序算法才算稳定?
相信很多程序猿伙伴都会有意或无意用到算法,特别是排序算法,而排序算法则会涉及稳定性,那怎样的排序算法才算稳定呢?
根据百度百科给出对排序算法稳定性的简单描述,假定在待排序的记录序列中,存在多个具有相同的关键字的记录,经过排序,这些记录的相对次序保持不变。
即在原序列中,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。
怎样的排序算法才算稳定?相关推荐
- std中稳定排序算法_排序算法问题:稳定排序与不稳定排序
(给算法爱好者加星标,修炼编程内功) 作者:紫红的泪 https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 前言 排 ...
- 一个交易系统需要经过几年的考验才算成功的交易系统,盈利需要几年才算稳定?
来源: 汇商琅琊榜APP 原文连接:https://mp.weixin.qq.com/s/V1atq2G83qX2XUEayGRtBw 我认为研发一个好的交易系统需要从三方面考虑: 交易系统规则符合盈 ...
- 九大排序算法,你会几个?
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则 ...
- 九大排序算法-C语言实现及详解
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...
- 这些排序算法的使用时机,你都知道吗?
转载自 这些排序算法的使用时机,你都知道吗? 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存 ...
- 超全十大经典排序算法及其分析
文章目录 0.算法概述 0.1 算法分类 0.2 算法复杂度 0.3 相关概念 1. 冒泡排序(Bubble Sort) 1.1 算法描述: 1.2 图解演示 1.3 代码实现 1.4 优化过程 1. ...
- 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
八大排序算法 发表于2012/7/23 16:45:18 662397人阅读 分类: c/c++ 数据结构与算法 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排 ...
- 【编程练习】八大排序算法
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...
- 八大排序算法总结以及python实现
原址 一.概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. ...
最新文章
- 华为自动驾驶实车实路测试视频曝光!
- 在唯一密钥属性“name”设置为“Application”时,无法添加类型为“add”的重复集合项...
- C++中出现一排金字塔符号_看懂施工图中的钢筋标注,真没你想的那么难
- Android模拟器无法上网问题
- 不同视图间的跳转方式
- Windows配置本地域名
- mysql limit的使用方法
- frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
- python threading类重写_python下threading模块使用的注意点
- JS:ES6-1 let 关键字
- 如何在windows2003(IIS6)下配置IIS,使其支持cshtml
- 小学五年级计算机考试试题,小学信息技术考试题库中五年级试题——选择题
- 2020中国数据智能产业图谱1.0版发布丨数据猿产业全景图
- java商城加入购物车接口实现_商城系统购物车功能分析实现
- 麒麟座IIC-STM32F103RET6(2)-完成US延时
- P1551 亲戚 并查集
- 单页应用首屏加载速度慢怎么解决?
- HC32L136/HC32L176开发之硬件IIC驱动AT24C64
- vivox21支持html,vivo X21支持双卡吗_vivo X21支持双卡双待吗-太平洋IT百科手机版
- mysql 空集 赋值_如何在MySQL查询中替换“空集”?