如何理解:选择排序中交换可能改变相同元素的相对顺序?

文章目录

  • 选择排序和冒泡排序区别
      • 选择排序(Selection Sort)
      • 冒泡排序(Bubble Sort)
      • 区别总结
  • 如何理解:选择排序中交换可能改变相同元素的相对顺序
      • 示例
      • 选择排序步骤
      • 关键点
      • 稳定排序的定义

选择排序和冒泡排序区别

要理解选择排序中交换可能改变相同元素的相对顺序,先回顾一下选择排序和冒泡排序区别:

选择排序(Selection Sort)

  1. 算法思想

    • 选择排序每次从未排序的部分中选择最小(或最大)的元素,并将其放到已排序部分的末尾。
  2. 步骤

    1. 从未排序的部分中找到最小(或最大)的元素。
    2. 将该元素与未排序部分的第一个元素交换位置。
    3. 重复上述过程,直到所有元素都被排序。
  3. 时间复杂度

    • 最好、最坏和平均情况的时间复杂度都是 (O(n^2))。
    • 交换操作较少,最多进行 (n-1) 次交换。
  4. 空间复杂度

    • 空间复杂度为 (O(1)),因为选择排序是原地排序。

冒泡排序(Bubble Sort)

  1. 算法思想

    • 冒泡排序通过多次遍历数组,每次比较相邻元素并交换顺序错误的元素,使得每次遍历后最大(或最小)的元素“冒泡”到数组的一端。
  2. 步骤

    1. 从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个比后一个大(或小),则交换它们的位置。
    2. 对整个数组进行多次遍历,直到没有需要交换的元素为止。
  3. 时间复杂度

    • 最好情况的时间复杂度是 (O(n))(当数组已经有序时,只需一次遍历)。
    • 最坏和平均情况的时间复杂度都是 (O(n^2))。
    • 交换操作较多。
  4. 空间复杂度

    • 空间复杂度为 (O(1)),因为冒泡排序也是原地排序。

区别总结

  • 算法复杂度:两者在最坏和平均情况下的时间复杂度相同,都是 (O(n^2))。但是选择排序在交换次数上通常比冒泡排序少。
  • 实现方式:选择排序每次找到最小(或最大)元素放到已排序部分,冒泡排序则是通过多次相邻元素的比较和交换来排序。
  • 稳定性:冒泡排序是稳定排序,选择排序是不稳定排序(因为选择排序中交换可能改变相同元素的相对顺序)。
  • 适用场景:在实际应用中,两者的使用较少,通常使用更高效的排序算法如快速排序或归并排序。但在数据量小且对交换次数要求高的情况下,可以考虑选择排序。

如何理解:选择排序中交换可能改变相同元素的相对顺序

选择排序中交换可能改变相同元素的相对顺序,这使得选择排序成为一种不稳定的排序算法。理解这一点可以通过具体的例子来说明:

示例

假设有一个数组 arr,包含以下元素:

[ \text{arr} = [4, 2, 3, 4, 1] ]

在这个数组中,有两个相同的元素 4。现在我们使用选择排序来对这个数组进行排序。

选择排序步骤

  1. 第一轮(选择最小元素 1)

    • 找到数组中最小的元素 1,它位于索引 4。
    • 1 与数组的第一个元素 4 交换。
    • 数组变为:[ 1, 2, 3, 4, 4 ]
  2. 第二轮(选择最小元素 2)

    • 找到剩余部分中最小的元素 2,它已经在索引 1。
    • 不需要交换。
    • 数组保持不变:[ 1, 2, 3, 4, 4 ]
  3. 第三轮(选择最小元素 3)

    • 找到剩余部分中最小的元素 3,它已经在索引 2。
    • 不需要交换。
    • 数组保持不变:[ 1, 2, 3, 4, 4 ]
  4. 第四轮(选择最小元素 4)

    • 找到剩余部分中最小的元素 4,它已经在索引 3。
    • 不需要交换。
    • 数组保持不变:[ 1, 2, 3, 4, 4 ]

在这个例子中,两个 4 的相对顺序没有改变,所以你可能会问为什么选择排序是不稳定的。让我们看看一个可能改变相对顺序的情况:

假设有一个数组:

[ \text{arr} = [4a, 2, 3, 4b, 1] ]

其中 4a4b 是两个相同的元素,但我们用 ab 来区分它们的相对顺序。

  1. 第一轮(选择最小元素 1)
    • 找到数组中最小的元素 1,它位于索引 4。
    • 1 与数组的第一个元素 4a 交换。
    • 数组变为:[ 1, 2, 3, 4b, 4a ]

你可以看到,现在 4b4a 之前了,这改变了它们的相对顺序。

关键点

选择排序在选择最小(或最大)元素并交换时,不会考虑相同元素的相对位置。因此,如果排序过程中涉及到相同元素的交换,原有的相对顺序可能会被打乱。

稳定排序的定义

稳定排序是指如果在排序前的数组中,有两个相同的元素 AB,且 AB 之前,在排序后的数组中 A 仍然在 B 之前。例如,冒泡排序和插入排序是稳定的,因为它们不会改变相同元素的相对顺序。

选择排序的这种行为导致它成为一种不稳定的排序算法。

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

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

相关文章

【Python】setup.py build_ext --inplace解释

【Python】setup.py build_ext --inplace解释 文章目录 【Python】setup.py build_ext --inplace解释功能命令详解应用场景示例具体步骤 功能 python setup.py build_ext --inplace 是用于构建和编译Python扩展模块的命令。它的主要用途是在开发期间将编译生成的扩展模块放置在…

基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用

背景 随着互联网服务的广泛普及与技术应用的深入发展,日志数据作为记录系统活动、用户行为和业务操作的宝贵资源,其价值愈发凸显。然而,当前海量日志数据的产生速度已经远远超出了传统数据分析工具的处理能力,这不仅要求我们具备…

550. 游戏玩法分析 IV

550. 游戏玩法分析 IV 题目链接:550. 游戏玩法分析 IV 代码如下: # Write your MySQL query statement below select round(avg(a.event_date is not null),2)as fraction from (select player_id,min(event_date) as loginfrom activitygroup by p…

Unity学习笔记---材质纹理天空盒

材质纹理 CubeMap立方体纹理 在Assets中,选择Create---Legacy---CubeMap可以创建立方体纹理。这种纹理由6个纹理图组成,用于天空盒、环境映射、反射、折射等场景。 天空盒 天空盒用于给场景添加一个远景背景。需要设置相机的Clear Flags 属性设置为 …

【机器学习】机器学习与AI大数据的融合:开启智能新时代

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 机器学习与AI大数据的融合 📒1. 引言📕2. 机器学习与大数据🎩机器学习与大数据的特征🎈大数据如…

驱动开发之platform总线

1.前言 在前面的实验以及提出的各种问题中,为了提高移植性,降低模块耦合度,提让模块高内聚,分离device与driver是一个必然的趋势了。为了解决这个问题,心心念念的platform总线出来。 linux从2.6起就加入了一套新的驱…

python中利用cartopy库绘制SST图像

1. Cartopy简介 Cartopy 是一个开源的 Python 库,用于绘制地图和地理数据分析。它结合了 matplotlib 的绘图功能和 shapely、pyproj 等库的地理空间数据处理能力,为用户提供了在地图上可视化数据的强大工具。 以下是 Cartopy 的一些主要特点和功能&#…

MicroPython教程:控制I/O引脚

控制 I/O 引脚 引脚对象用于控制 I/O 引脚(也称为 GPIO - 通用输入/输出)。引脚对象通常与可以驱动输出电压和读取输入电压的物理引脚相关联。pin 类具有设置 pin 模式(IN、OUT 等)的方法以及获取和设置数字逻辑电平的方法。有关…

【四大组件】-- 服务 Service

服务 Service-服务(一)生命周期及使用方式 Service-服务(二)onStartCommand()详解 Service.onStartCommand()详解 什么是服务 它和Activity一样都是Context的子类,只不过它没有UI界面, 是在后台运行的组件。 默认运行在主线程中,因此不要在…

探索不同类型的“低”之魅力

随着数字化转型的浪潮不断高涨,低代码平台(LCDP)已逐渐成为企业快速构建和迭代应用程序的重要工具。低代码平台以其高效、灵活和易于集成的特点,受到越来越多企业的青睐。然而,低代码平台并非一蹴而就的单一产品&#…

CST电磁仿真软件表面等离子极化激元SPP --- 一维光栅耦合 - 衍射模式, 效率, Floquet端口

这两期我们看一下衍射光栅的高阶衍射、衍射效率、反射率。具体到仿真设置,就是Floquet端口的模式分析,S参数与衍射效率和反射率的关系。那么研究这些衍射和表面等离子极化激元SPP有什么关系呢?关系可大了,光栅是一种能够用来激励出…

企业微信群发功能:提升沟通效率,助力企业营销

随着信息技术的快速发展,企业微信作为企业内部沟通和企业对外营销的重要工具,其功能也在不断更新和完善。其中,企业微信的多次群发功能,不仅极大地提升了企业内部的沟通效率,更为企业的对外营销提供了强有力的支持。本…

告别鼠标,安卓模拟鼠标,绘图板,手写板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们,上链接了:https://download.csdn.net/download/jasonhongcn/89387887 横屏模式: 竖屏模式: 操作说明: 1. 手势滑动模拟鼠标移动 2. 界面如果有滚动条,右手指按紧,通过左手指移动实现…

react高阶组件——withRouter

withRouter是高阶组件&#xff0c;可以通过 withRouter 获取到 history、location、match 对象。 import { withRouter } from umi;export default withRouter(({ history, location, match }) > {return (<div><ul><li>history: {history.action}</l…

力扣:101. 对称二叉树

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; …

mysql DDL——增删改

简略版&#xff1a; 文字化&#xff1a; 1.对全部字段添加数据&#xff1a;insert into 表名 values (值1&#xff0c;值2&#xff0c;值3...); 2.对指定字段添加数据&#xff1a;insert into 表名 (字段名1&#xff0c;字段名2...) values &#xff08;值1&#xff0c;值2..…

跨区域文件管控过程中 如何保障安全和效率?

跨区域文件管控是指在跨越不同地域或区域的情况下对文件进行管理和控制的过程。这种控制可能涉及多个方面&#xff0c;包括安全性、合规性和管理效率等。 为了有效进行跨区域文件管控&#xff0c;组织通常需要采取一系列策略和措施&#xff0c;例如&#xff1a; 1、加密和安全…

java SQLException异常的解决步骤

要解决Java中的SQLException&#xff0c;可以考虑以下几个步骤&#xff1a; 异常处理&#xff1a;在程序中捕获SQLException并进行处理。可以使用try-catch语句块来捕获异常&#xff0c;然后在catch块中处理异常情况。 例如&#xff1a; try {// 执行数据库操作 } catch (SQ…

旺店通·企业奇门和金蝶云星空接口打通对接实战多系统间数据

旺店通企业奇门和金蝶云星空接口打通对接实战 来源系统:旺店通企业奇门 慧策&#xff08;原旺店通&#xff09;是一家技术驱动型智能零售服务商&#xff0c;基于云计算PaaS、SaaS模式&#xff0c;以一体化智能零售解决方案&#xff0c;帮助零售企业数字化智能化升级&#xff0c…

二进制文件(.bin等文件)转C语言数组形式hex文件(.c等文件)

使用python脚本把二进制文件&#xff08;.bin等文件&#xff09;转C语言数组形式hex文件&#xff08;.c等文件&#xff09;&#xff0c;具体代码如下&#xff1a; &#xff08;1&#xff09;读取.bin文件数据 &#xff08;2&#xff09;生成C语言数组定义 &#xff08;3&…