选择排序、快速排序、插入排序等经典八大算法稳定性分析

news2025/7/20 13:40:13

选择排序、快速排序、插入排序等经典八大算法稳定性分析

  • 稳定性定义:
    • 各排序算法的稳定性:
      • 一、冒泡排序
      • 二、选择排序
      • 三、插入排序
      • 四、快速排序
      • 五、归并排序
      • 六、希尔排序(shell)
      • 七、基数排序 :
      • 八、堆排序
  • 常用排序算法对比

稳定性定义:

排序前后两个相等的数相对位置不变,则算法稳定。

稳定性优点:从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用

各排序算法的稳定性:

1、堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法

2、基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法

一、冒泡排序

1、小的元素往前调或者把大的元素往后调;

2、比较是相邻的两个元素比较,交换也发生在这两个元素之间;

3、稳定排序算法

二、选择排序

1、每个位置选择当前元素最小的;

2、在一趟选择中,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了;

3、举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了;

4、不稳定的排序算法

三、插入排序

1、已经有序的小序列的基础上,一次插入一个元素;

2、想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置;

3、如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面;

4、相等元素的前后顺序没有改变;

5、稳定排序算法

四、快速排序

1、两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]

2、如果i和j都走不动了,i <= j, 交换a[i]a[j],重复上面的过程,直到i>j

3、交换a[j]a[center_index],完成一趟快速排序;

4、在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素53(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱;

5、不稳定发生在中枢元素和a[j] 交换的时刻;

6、不稳定的排序算法

五、归并排序

1、把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的短序列合并成一个有序的长序列,不断合并直到原序列全部排好序;

2、合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面,这样就保证了稳定性;

3、稳定排序算法

六、希尔排序(shell)

1、按照不同步长对元素进行插入排序;

2、当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;

3、当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高;

4、所以,希尔排序的时间复杂度会比 O ( n 2 ) O(n^2) O(n2)好一些

由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元 素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱;

5、不稳定的排序算法

七、基数排序 :

1、按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位;

2、有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优 先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前;

3、用于整数;

4、需要较多的存储空间;

5、基于分别排序,分别收集;

6、稳定排序算法

八、堆排序

1、是选择排序的一种;

2、堆的结构是节点i的孩子为 2 ∗ i 2*i 2i 2 ∗ i + 1 2*i+1 2i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点,是完全二叉树;

3、在一个长为n 的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为 n / 2 − 1 , n / 2 − 2 , … 1 n /2-1, n/2-2, …1 n/21,n/22,1这些个父节点选择元素时,就会破坏稳定性。有可能第 n / 2 n/2 n/2个父节点交换把后面一个元素交换过去了,而第 n / 2 − 1 n/2-1 n/21个父节点把后面一个相同的元素没 有交换,那么这2个相同的元素之间的稳定性就被破坏了;

4、不稳定的排序算法

常用排序算法对比

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码的简单设计五原则

欢欢&#xff1a;“你看我的代码用了策略模式和状态模式&#xff0c;假如后面客户会有这样的需求&#xff0c;可以无缝扩展&#xff0c;多么健壮&#xff01;” 清扬一脸狐疑&#xff0c;心中念叨了数遍 &#xff1a;“哼&#xff0c;过度设计&#xff01;”&#xff0c;只见她…

APISpace 带你一起走进西湖美景

俗话说&#xff1a;“上有天堂&#xff0c;下有苏杭”。 “欲把西湖比西子&#xff0c;浓妆艳抹总相宜” 今天我就带大家走进杭州的西湖美景。自古以来&#xff0c;文人歌者面对西湖美景留下千古绝句&#xff0c;还以西湖为背景书写了一段段动人的爱情传说。 天生自带浪漫色…

医学生考研考博太卷,一篇文章轻松助力上岸——生物信息学及R语言基础知识之向量的运算(二)

考研考博太卷了,卷不过,想没想过本科发一篇文章呢? 330分考研人淘汰390分考研人这个故事,大家应该都知道吧。 本专栏带你六个月内,搞定一篇文章,本科生发文章也很容易。 在卷考研的同时,再卷一篇SCI,你就是新一任卷王。 本专栏教你不用花钱发一篇生信文章,从三个方…

态库、静态库之间的相互嵌套

本文的目的是测试各种类型库的编译后的使用效果&#xff0c;包括库又链接其他库的编译方法&#xff0c;使用方法&#xff0c;依赖性等。 太长不看版&#xff1a;请跳至文章最后的总结对比表。 一、内容包含&#xff1a; ①静态库libbb.a依赖静态库libaa.a的测试&#xff1b; …

学会分享,学会生活,分享5款简单易用的软件。

分享是一种博爱的心境&#xff0c;学会分享&#xff0c;就学会了生活。 1.在线图片编辑工具——佐糖 佐糖是一款在线免费图片编辑工具&#xff0c;采用AI人工智能技术&#xff0c;自动识别图片&#xff0c;支持一键抠图&#xff0c;更换背景&#xff0c;移除水印等。另外还提…

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…

别再花钱买 Chatgpt 资源了,这里有免费的,2 分钟上手

最近无论是打开社交网站&#xff0c;还是朋友圈&#xff0c;就连中午吃个饭都能听到大家都在聊 ChatGPT&#xff0c;仿佛如果这一刻你不懂这是个啥玩意儿&#xff0c;你就会觉得自己完全搭不上他们的话... 那ChatGPT 是什么&#xff1f; 百度上是这样解释的&#xff1a; ChatG…

最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏

屏幕录制软件可让您捕获屏幕以与他人共享&#xff0c;创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1&#xff09;奇客免费录屏 奇客免费录屏&am…

2023家用投影仪怎么选?极米H5值得推荐

如今不管是手机还是电视都在不断向大屏幕靠近&#xff0c;消费者也在追求越来越大的屏幕尺寸。同时作为提升生活幸福指数的重要家居用品&#xff0c;投影仪正逐渐取代电视&#xff0c;成为消费者的首选。随着国内智能投影行业的不断发展&#xff0c;市面上智能投影产品也越来越…

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法 用Allegro做PCB设计的时候,移动器件的时候,会出现附带的孔和线也会被同步更改,有时并不是期望的效果,如下图 Allegro其实将这个功能关闭即可,具体操作如下 选择Edit点击Move命令

Vulnhub 渗透练习(二)—— BILLU: B0X

环境下载 下载链接 环境搭建 直接用 vmware 打开&#xff0c;设为 NAT 模式。 信息收集 nmap 扫描 主机扫描&#xff1a; nmap -sP 192.168.200.0/24端口扫描&#xff1a; nmap -sV 192.168.200.129 开了一个 80 端口 apache 服务&#xff0c;和 ssh 服务&#xff0c;后…

时间轮算法概念

概述 在一些中间件中我们经常见到时间轮控制并发和熔断。 那么这个时间轮具体是什么呢&#xff0c;又是怎么使用的呢。 简介 其实时间轮可以简单的理解成我们日常生活中的时钟。 时钟里的指针一直在不停的转动&#xff0c;利用这个我们可以实现定时任务&#xff0c;目前lin…

c入门数的编程 拆数,构造数,c语言字符找出数字拼接,水仙花数 将一个多位数各位拆分

学会构造数和拆分数 目录 学会构造数和拆分数 1&#xff1a;一个三位数&#xff0c;求其各位数字之和 补充&#xff1a;将一个多位数各位拆分求和&#xff0c;&#xff08;不知道位数怎么求&#xff09; 2&#xff1a;串中取数&#xff08;字符转数字&#xff09; 3&#…

大数据之-Nifi-Nifi的应用场景1_创建并配置getfile处理器---大数据之Nifi工作笔记0004

来说一下nifi的应用场景,首先添加一个GETFILE处理器 添加以后设置处理器名称 设置处理器属性 getfile处理器的属性解释 这个加黑的是必须要选择的,非加黑的可以先不进行选择 这里我们只是设置这个input directory就可以了

是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...

华为是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有9.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾…

PMP是不是要考第七版了?

现在确实已经到第七版了&#xff0c;但是第六版还是需要学习的&#xff0c;就是结合两个版本去备考&#xff0c;新考纲把很多内容都缩减了&#xff0c;增加了敏捷管理的内容&#xff0c;但是第六版有很多详细的解析&#xff0c;所以如果你想稳一点&#xff0c;那么两个版本都需…

win10本地连接Xftp7时,压缩文件命名乱码解决方案

win10本地连接Xftp7时&#xff0c;压缩文件命名乱码解决方案1.问题如下图所示&#xff1a;2.解决方案如下: (1)如上所展示的问题&#xff0c;是因为所默认选则的语言是中文&#xff0c;计算机直接编译返回。 &#xff08;2&#xff09;修改属性中的选项中的编码语言&#xff0c…

Spring的概述

Spring框架是为解决企业应用开发的复杂性而诞生&#xff0c;它简化了Java应用开发&#xff0c;提高了应用开发的可测试性和可重用性。 Spring的核心理念是控制反转&#xff08;IoC&#xff09;&#xff0c;其通过依赖注入&#xff08;DI&#xff09;的方式来实现控制反转。 Ja…

XQuery 简介

XQuery 简介 解释 XQuery 最佳方式是这样讲&#xff1a;XQuery 相对于 XML 的关系&#xff0c;等同于 SQL 相对于数据库表的关系。 XQuery 被设计用来查询 XML 数据 - 不仅仅限于 XML 文件&#xff0c;还包括任何可以 XML 形态呈现的数据&#xff0c;包括数据库。 您应该具备的…

我用python疯狂爬取公司数据

我是半路从一个纯小白学过来的&#xff0c;学习途中也掉过许多坑&#xff0c;在这里建议新手要先把基础打扎实&#xff0c;然后再去学习自己需要的内容&#xff0c;不要想着全部学完再用&#xff0c;那样你是永远学不完的&#xff0c;用哪方面就学习哪方面的内容&#xff0c;不…