当前位置: 首页 > news >正文

【算法练习】28:选择排序学习笔记

一、选择排序的算法思想

        弄懂选择排序算法,先得知道两个概念:未排序序列,已排序序列。

        原理:以升序为例,选择排序算法的思想是,先将整个序列当做未排序的序列,以序列的第一个元素开始。然后从左往右遍历一轮未排序的序列,找到最小的元素(其实就是依次把未排序序列中的元素与已排序序列中最后一个元素作比较,小的话就交换彼此),选择排序每轮循环都会确定一个最终位置的元素。

        时间复杂度:内外两层循环,所以是O(n^2)

        空间复杂度:没有用到额外的空间,所以是O(1)

        稳定性:不稳定

二、选择排序的算法步骤

  1. 初始化:给定一个需要排序的数组
  2. 遍历数组:从数组的第一个元素开始,每次遍历都要在整个未排序序列中找出最小元素
  3. 比较并交换元素:将找到的最小元素与未排序部分的第一个元素交换位置,这样每一轮结束后,原来的未排序序列的第一个元素就变得整个未排序部分最小的了,于是他就有序了。就可以把它归为已排序部分
  4. 移动假想墙:随着每一轮的完成,相当于在数组中形成了一道“墙”,墙左边的元素都是已排序的,右边则是未排序的部分。下一轮的比较将在这道墙的右边进行
  5. 重复过程:2到4步骤,不断遍历并交换元素,直到所有的元素都被处理过

        本文是自己的算法学习笔记,所以就不放动图演示了,网上很多都比较画的好,这里超级推荐一个开源算法项目,链接我放在这里了!非常感谢开源大佬:《hello算法》选择排序

三、基于Python的选择排序实现

def selection_sort(arr):"""选择排序"""n = len(arr)# 外循环:未排序区间为 [i, n-1]for i in range(n - 1):# 内循环:找到未排序区间内的最小元素k = i  每次都先假设未排序部分第一个元素是最小元素for j in range(i + 1, n):if arr[j] < arr[k]:k = j  # 记录最小元素的索引# 将该最小元素与未排序区间的首个元素交换arr[i], arr[k] = arr[k], arr[i]

http://www.lryc.cn/news/332547.html

相关文章:

  • 【关于窗口移动求和的两种计算方法】
  • Win10文件夹共享(有密码的安全共享)(SMB协议共享)
  • Client sent an HTTP request to an HTTPS server
  • Springboot传参要求
  • 数字乡村创新实践探索:科技赋能农业现代化与乡村治理体系现代化同步推进
  • C语言——找单身狗1
  • Day82:服务攻防-开发组件安全Solr搜索Shiro身份Log4j日志本地CVE环境复现
  • 网络协议——VRRP(虚拟路由冗余协议)原理与配置
  • Elasticsearch:我们如何演化处理二进制文档格式
  • 第八讲 Sort Aggregate 算法
  • clickhouse MPPDB数据库--新特性使用示例
  • MATLAB多级分组绘图及图例等细节处理 ; MATLAB画图横轴时间纵轴数值按照不同sensorCode分组画不同sensorCode的曲线
  • 20240405,数据类型,运算符,程序流程结构
  • Prometheus+grafana环境搭建Nginx(docker+二进制两种方式安装)(六)
  • 贝叶斯逻辑回归
  • Win10 下 Vision Mamba(Vim-main)的环境配置(libcuda.so文件无法找到,windows系统运行失败)
  • 4 万字全面掌握数据库、数据仓库、数据集市、数据湖、数据中台
  • Leetcode 64. 最小路径和
  • FANUC机器人故障诊断—报警代码更新(三)
  • mysql 本地电脑服务部署
  • 爬虫学习第一天
  • labview如何创建2D多曲线XY图和3D图
  • 【华为OD机试】芯片资源限制(贪心算法—JavaPythonC++JS实现)
  • 服务器硬件构成与性能要点:CPU、内存、硬盘、RAID、网络接口卡等关键组件的基础知识总结
  • STC89C51学习笔记(四)
  • Arcgis Pro地理配准
  • 数字转型新动力,开源创新赋能数字经济高质量发展
  • 解决JavaWeb中IDEA2023新版本无法创建Servlet的问题
  • 关于oracle切换mysql8总结
  • Docker 容器编排技术解析与实践