排序算法问题:稳定排序与不稳定排序

排序算法问题:稳定排序与不稳定排序转载自 https www cnblogs com codingmylife archive 2012 10 21 2732980 html 稳定排序和不稳定排序这几天笔试了好几次了 连续碰到一个关于常见排序算法稳定性判别的问题 往往还是多选 对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目 当然如果你笔试之前已经记住了数据结构书上哪些是稳定的 哪些不是稳定的

转载自:https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html

 

稳定排序和不稳定排序

      这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。

      首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。

      其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。另外,如果排序算法稳定,对基于比较的排序算法而言,元素交换的次数可能会少一些(个人感觉,没有证实)。

回到主题,现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。

(1)冒泡排序

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

(2)选择排序

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n – 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

综上,得出结论: 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法

排序算法问题:稳定排序与不稳定排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220919.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:21
下一篇 2026年3月17日 下午7:21


相关推荐

  • matlab时频分析之连续小波变换cwt

    matlab时频分析之连续小波变换cwtmatlab 时频分析之连续小波变换 cwt1 小波分析简介 2 小波分析基本原理 3cwt 的 matlab 实现 1 小波分析简介和傅里叶变换比 小波变换和短时傅里叶变换都有着相同的优点 就是可以同时在时域和频域观察信号 所以小波变换非定常信号的分析中有很大的作用 有关短时傅里叶变换的文章 可以参见我之前写的 matlab 时频分析之短时傅里叶变换 spectrogramh blog c

    2026年3月26日
    1
  • 怎么激活成功教程网络尖兵?

    怎么激活成功教程网络尖兵?nbsp 最近有网友反映 当地的电信 ISP 使用了一个叫 网络尖兵 的设备来限制用户共享上网 给大家带来了许多不便 小弟总结网上各高手的心血 总结出激活成功教程 网络尖兵 的办法 公布如下 希望对大家有帮助 nbsp nbsp nbsp nbsp nbsp 网络尖兵 是采用多种方法探测用户是否用共享方式上网 从而进行限制 下面我分别进行激活成功教程 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 检查同一 IP 地址的数据包中是否有不同的 MAC 地址 如果是则判定用户共享上网 激活成功教程的办法是把

    2026年3月20日
    2
  • FAST_ICA MTALAB工具包下载/ICA分析/独立成分分析MATLAB安装包/ICA toolbox

    FAST_ICA MTALAB工具包下载/ICA分析/独立成分分析MATLAB安装包/ICA toolbox很多小伙伴在后台问我,MATLAB怎么进行独立成分分析(ICA)。一般来讲,ICA操作可以说是EEG里面十分总要的操作。EEGLAB这方面做的非常好,只需要RunICA就能很快的进行EEG的分析,但同样也有其弊端(懂得都懂)。这里,我提供了matlab中FAST_ICA的安装包,由于年代较较远,因此,支持的MATLAB版本可能比较老。而且网址必须外网连接,如果有直接想要安装包的小伙伴可直接关注我的公众号,回复FAST_ICA,便可免费领取。打个小广告,粉爷公众号大厂面经,刷题指南,脑…

    2022年5月13日
    45
  • PHPMailer发送邮件失败:SMTP connect failed

    PHPMailer发送邮件失败:SMTP connect failed

    2021年9月21日
    82
  • java中垃圾回收机制_垃圾回收机制算法

    java中垃圾回收机制_垃圾回收机制算法一、如何确定某个对象是“垃圾”?这一小节先了解一个最基本的问题:如果确定某个对象是“垃圾”?既然垃圾收集器的任务是回收垃圾对象所占的空间供新的对象使用,那么垃圾收集器如何确定某个对象是“垃圾”?通过什么方法判断一个对象可以被回收了。在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失…

    2022年10月13日
    4
  • SAE J1939 协议源代码分析(二)-程序移植

    SAE J1939 协议源代码分析(二)-程序移植预备知识1.熟悉CAN2.0B协议,及相关硬件驱动开发2.熟悉SAEJ1939协议程序移植流程CreatedwithRaphaël2.1.0将代码加载到你的工程打开配置文件J1939_Config.h明白默认地址和标识符配置规则?了解J1939支持的功能配置使用

    2022年6月10日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号