详解选择排序:从概念到代码的完整指南

news/2024/12/25 15:47:17/文章来源:https://www.cnblogs.com/java-note/p/18630604

一、选择排序的基本概念

选择排序(Selection Sort)是一种简单的排序算法。它的基本思想是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

二、选择排序的过程

  1. 第一轮排序
    • 假设我们有一个数组arr = [5, 4, 3, 2, 1]。在第一轮排序中,我们需要在整个数组中找到最小的元素。通过比较,我们发现最小的元素是1
    • 然后将1与数组的第一个元素5交换位置,此时数组变为[1, 4, 3, 2, 5]
  2. 第二轮排序
    • 现在我们只需要考虑数组中除了第一个元素(已经排好序)之外的部分,即[4, 3, 2, 5]。在这个子数组中,最小的元素是2
    • 2与子数组的第一个元素4交换位置,数组变为[1, 2, 3, 4, 5]
  3. 后续排序过程
    • 继续这个过程,每次都在未排序的部分中找到最小的元素,并将其交换到正确的位置,直到整个数组都排序完成。

三、选择排序的时间复杂度

  1. 最坏情况和平均情况
    • 时间复杂度为\(O(n^2)\)。在最坏的情况下,每次都需要比较剩余未排序元素中的所有元素来找到最小(大)的那个。例如,对于一个逆序排列的数组,如[n, n - 1, n - 2,..., 1],在第一轮需要比较n - 1次找到最小元素,第二轮需要比较n - 2次,以此类推,总的比较次数为\(\sum_{i = 1}^{n-1}i=\frac{n(n - 1)}{2}\),当\(n\)很大时,其时间复杂度近似为\(O(n^2)\)
    • 平均情况也是\(O(n^2)\),因为无论数组的初始顺序如何,选择排序都需要进行大致相同数量的比较操作来确定最小(大)元素。
  2. 最好情况
    • 时间复杂度仍然是\(O(n^2)\)。即使数组已经是有序的,选择排序也会遍历剩余的未排序元素来确认它们已经是有序的,不会像某些其他排序算法(如冒泡排序在最好情况下时间复杂度可以为\(O(n)\))那样提前结束排序过程。

四、选择排序的空间复杂度

  1. 空间复杂度
    • 选择排序是一种原地排序算法,它的空间复杂度为\(O(1)\)。这是因为它只需要有限的额外空间来进行元素的交换和比较,不需要额外的数据结构来存储整个数组的副本等,只是在原数组的基础上通过交换元素的位置来实现排序。

五、选择排序的稳定性

  1. 稳定性定义
    • 稳定排序是指在排序过程中,相等的元素在排序前后的相对位置不变。
  2. 选择排序的不稳定性
    • 选择排序是不稳定的排序算法。例如,对于数组[5, 4, 5, 2, 3],在第一轮排序中,会将最小的元素2与第一个5交换位置,这样就改变了两个5元素的相对位置,导致排序结果可能不符合稳定排序的要求。

六、选择排序的代码实现(以升序为例,使用Python)

def selection_sort(arr):n = len(arr)for i in range(n):min_idx = ifor j in range(i + 1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr
  1. 代码解释
    • 外层循环for i in range(n)控制排序的轮数,总共需要n - 1轮排序就可以将n个元素排好序。
    • 在内层循环for j in range(i + 1, n)中,从i+1位置开始到数组末尾,寻找最小的元素的索引min_idx
    • 找到最小元素的索引后,将arr[i]arr[min_idx]交换位置,这样就将最小元素放到了已排序部分的末尾。

七、选择排序的应用场景

  1. 小规模数据排序
    • 由于其简单易懂的实现方式,对于小规模的数据(例如,数据量小于100),选择排序可以是一个不错的选择。在这种情况下,它的\(O(n^2)\)时间复杂度不会导致性能问题过于严重。
  2. 作为其他复杂算法的基础组件
    • 在一些更复杂的算法中,可能会用到选择排序的思想来处理局部数据的排序或者预排序,例如在某些贪心算法或者分治算法的子过程中,选择排序的简单性可以帮助快速实现局部的排序需求。

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

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

相关文章

人员聚集监测识别摄像机

人员聚集监测识别摄像机可以通过高清晰度的摄像头和先进的人脸识别技术,准确地识别出人群中的个体,并记录下他们的行踪和行为。在人员密集的场所,如商场、车站、体育场馆等,这种摄像机能够帮助安保人员更好地掌握人员活动的情况,及时发现异常情况,有效应对突发事件。除了…

CS61B srping 2018 lab03 https://sp18.datastructur.es/

Unit Testing with JUnit, Debugging 准备 装好 CS61B插件(emmmmm,不装也没事) 把lab2 的IntList.java 复制到 lab3/IntList 文件夹. 看看关于测试的课程视频 介绍 啊? JUnit是java测试框架,现在要用JUnit进行单元测试,单元Unit就是把程序分成小块的单元,一个单元的功…

摄像机实时接入分析平台视频分析网关:如何评估视频分析系统的性能?

在当今这个数字化、智能化快速发展的时代,视频分析系统已成为安全监控、交通管理、商业智能等多个领域不可或缺的技术支撑。这些系统的性能评估对于确保其有效性和可靠性至关重要。以下是对视频分析系统性能评估的关键指标和方法的详细探讨,这些评估将帮助我们深入了解系统的…

Protocol Buffers 使用笔记

Protocol Buffers 使用笔记created: 2024-03-04T11:11+08:00 modified: 2024-11-26T15:28+08:00 published: 2024-12-25T15:30+08:00 categories: applicationsProtocol Buffers 简称 protobuf 或者 PB,要解决的问题是这样的: 在互联网上传输大量数据,如果使用 json 等类似格…

域名解析平台有哪些

在互联网的广袤世界中,域名解析平台起着至关重要的作用,它们就像是互联网的 “导航仪”,将人们易于记忆的域名转换为计算机能够理解的 IP 地址,从而确保我们能够顺利访问各类网站和在线服务。域名解析的过程就是将域名翻译为对应的 IP 地址,使得浏览器能够准确地找到服务器…

Pycharm2024.3完整的安装教程(附激活,常见问题处理)

卸载老版本 Pycharm 首先,如果小伙伴的电脑上有安装老版本的Pycharm , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可): TIP:如果你之前使用过本站提供的 激活到 2025 年版本脚本,需要执行对应卸载脚本 /适用2024版本/JetBrains 2023 最新全家桶/jetbra /…

搭建npm私有仓库——verdaccio

前言Verdaccio 是一个简单的、零配置要求的本地私有 npm 注册表。无需整个数据库即可开始!Verdaccio 开箱即用,带有自己的小型数据库,并且能够代理其他注册表(例如 npmjs.org),并在此过程中缓存下载的模块。对于那些希望扩展其存储功能的人,Verdaccio 支持各种社区制作的…

门店协作的未来:协作文档如何提升客户体验?

汽车销售是一种高竞争、高需求精细化管理的业务形态。门店销售团队不仅需要对接客户,还要实时反馈总部的策略与数据。如果销售流程中协同效率不足,往往会导致商机流失和客户满意度下降。协作文档工具的普及,为车企门店带来了全新解决方案。 车企门店销售面临的核心问题 在车…

功率器件的热设计基础(二)——热阻的串联和并联

功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计…

视频分析设备平台EasyCVR关于未来监控系统可能会集成哪些新技术?

随着科技的飞速发展,监控系统正经历着一场革命性的变革。未来的监控系统将不再是单一的观察和记录工具,而是集成了多种前沿技术的智能平台,它们将极大地提高安全性、效率和响应速度。以下是未来监控系统可能集成的一些关键技术。1、人工智能技术 1)监控系统将越来越多地应用…

【亲测能用】专业音乐制作软件Ableton Live Suite v12.1.5 中文版(附安装教程)

软件介绍 在数字音频工作站(DAW)的领域中,Ableton Live以其创新和灵活性脱颖而出,成为全球音乐家和制作人的首选工具。由德国Ableton公司精心打造,这款软件不仅支持无缝的音乐播放和即时编辑,还提供了强大的音频效果和虚拟乐器,让音乐创作变得无限可能。 功能亮点 Ablet…

【测试侧】产品场景用例模板

产品的场景法用例设计的测试场景用例模板