排序算法稳定性总结
来源:互联网 发布:淘宝玩具专卖 编辑:程序博客网 时间:2024/04/26 18:34
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
1、选择排序:第i轮时,扫描未排序序列/后半部分中找到“最小”/第i小元素,与i位置元素交换。即发生了非相邻元素的交换,如果两个交换元素之间存在元素与i位置元素相等,则会改变两个相等元素的先后顺序,所以不稳定!
2、插入排序:第i轮时,将i+1位置元素从后向前依次与前半部分(有序)元素比较,插入到小于等于的元素之后,因此不会改变两个相等元素的先后顺序,稳定!
3、冒泡排序:所有的比较和交换均发生在两个相邻元素,如果两个元素相等则不会发生交换,因此不会改变相等元素的先后顺序,稳定!
4、快速排序:“中轴元素”将序列分为两部分,再将中轴元素交换到中间,因此当中轴元素为两个相等元素之一时,就会导致先后顺序发生改变,不稳定!
5、归并排序:递归排序是把序列递归的分成短序列,递归的出口是段序列为一个(认为有序)或两个元素(依次比较和交换后有序),然后将短序列合并为一个有序的长序列。可以看到一个元素时不会发生交换,两个元素时最多交换相邻元素,不可能破坏相等元素的次序,稳定!
6、希尔排序:步长为1之前的步长,由于会交换不相邻的元素,如果待交换元素之间存在与这两个元素相等的元素,就会导致相等元素的先后顺序发生改变,所以不稳定!
7、基数排序:基数排序是按照低位先排序,然后收集;按照次低位排序,再收集,以此类推直到最高位。基数排序基于分别排序分别收集,所以是稳定的!
8、堆排序:交换了不相邻元素,可能会破坏两个相等元素的次序,不稳定!
总结:
不稳定:当出现交换两个不相邻元素时,由于它们中间的某元素有可能与要交换的两个元素相等,会破坏相等元素的次序,是不稳定的。e.g..选择排序、快速排序、希尔排序和堆排序。
稳定:如果元素的交换只发生在两个相邻元素,肯定是稳定的,e.g..冒泡排序、归并排序、基数排序;插入排序由于会从相邻元素开始比较,最后小于等于的元素之后,也保证了不可能会破坏两个相等元素的顺序,因此也是稳定的。
- 排序算法稳定性总结
- 排序算法稳定性总结
- 排序算法的稳定性总结
- 各种排序算法稳定性的总结!!!
- 排序算法总结和稳定性分析
- 八大排序算法总结&时间复杂度&稳定性
- 转 各种排序算法稳定性的总结
- 各种排序算法稳定性的总结
- 各种排序算法稳定性的总结
- 各种排序算法的稳定性总结(转载)
- 各种排序算法思想及其稳定性总结
- 各种排序算法稳定性的总结!!!
- 8个排序算法的稳定性总结
- 文章标题 排序算法稳定性总结
- 各种排序算法稳定性的总结!!!
- 【每日算法】排序算法总结(复杂度&稳定性)
- 排序算法稳定性
- 排序算法稳定性
- Android Service 服务(三)—— bindService与remoteService
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-6.对话框)
- Windows Azure云空间入门教程-中国版Windows Azure正式开放
- 重要的政府职位在印度
- iOS开发中KVO的内部实现 runtime
- 排序算法稳定性总结
- 关于Android圆形图片的一种优化方案(可以显示网络图片)
- js变量以及其作用域详解
- 在时间电影评论
- 线程池代码
- Linux - 常用命令
- 关于Spring中AOP的两种动态代理
- css 箭头的实现
- 黑马28期java+android视频以及一些其他视频