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

【Python排序算法系列】—— 选择排序

21dd41dce63a4f2da07b9d879ad0120b.png

🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:
"没有罗马,那就自己创造罗马~"


目录

选择排序 

过程演示:

选择排序实现代码:

分析选择排序:

Practice2:

📝总结:


选择排序 

过程演示:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

选择排序对冒泡排序进行了改进保留了其基本的多趟比对思路,每趟都使当前最小项就位。
但选择排序
对交换进行了削减,相比起冒泡排序进行多次交换,每趟仅进行1次交换,记录最小项的所在位置,最后再跟本趟第一项交换  ---> 两两对比,小(大)的放前(后)面,对比过程不发生交换。

选择排序的时间复杂度比冒泡排序稍优but

比对次数不变,还是0(n²)

交换次数减少为0(n)

选择排序实现代码:

#默认第一个是最小,然后与后面进行比较,遇到最小就交换,不影响比较过程。
def selectionSort(arr):# i : 记录当前位置的索引for i in range(len(arr)):#初始化变量positionMin 为 i, 记录最小元素的索引位置positionofMin = i #默认最小值的下标从0开始# j :记录后面待比较元素的位置索引for j in range(i + 1,len(arr)):#对比找到最小值,然后更新最小值下标if arr[positionofMin] > arr[j]:positionofMin = j#将最小元素 放到 已排好序部分的末尾arr[i],arr[positionofMin] = arr[positionofMin],arr[i]return arrlist = [5,3,1,4,2]
print(selectionSort(list))

分析选择排序:

选择排序算法和冒泡排序算法的比较次数相同,所以时间复杂度也是 O(n²)。但是,由于减少了交换次数,因此选择排序算法通常更快。

Practice2:

选择排序可以先排小的再排大的,也可以逆过来先排大的再排小的。

👇下面是我的解题思路:

这道题,我们可以一眼看出它是先排大的数再排小的数,因为如果先排小的数,应该是先排1,很明显没有这个选项。

所以,我们从后面开始,

第一轮:

20默认是最大开始往前比较找有没有比它还要大的值中的最大值,很显然没有,那我们继续往下面的元素8开始第二轮的对比。

第二轮:

倒数第二位的8,往前找比它大的数,与它前面所有比它大的数中的最大值【19】进行交换,8和19进行交换。

第三轮:

倒数第三位的18,往前找比它大的数,遗憾的是没有,所以就无需进行交换。

所以最终答案是: [11,7,12,14,8,1,6,18,19,20]

📝总结:

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

相关文章:

  • 会议室占用时间段 - 华为OD统一考试
  • 计算机网络复习5
  • React Hooks 面试题 | 05.精选React Hooks面试题
  • 2024收入最高的编程语言
  • Android笔记(二十三):Paging3分页加载库结合Compose的实现分层数据源访问
  • Python实现马赛克图片处理
  • 你能描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?
  • 【经典算法】有趣的算法之---蚁群算法梳理
  • 第八届视觉、图像与信号处理国际会议(ICVISP 2024) | Ei, Scopus双检索
  • 《HelloGitHub》第 93 期
  • JAVA B/S架构智慧工地源码,PC后台管理端、APP移动端
  • 【adb】--- win10 配置 adb环境 超详细 (持续更新中)
  • SQL注入安全漏洞详解
  • 数据结构与算法教程,数据结构C语言版教程!(第一部分、数据结构快速入门,数据结构基础详解)四
  • mac安装k8s环境
  • HarmonyOS4.0系列——04、@Styles、@Extend、@Extend事件以及多态样式stateStyles
  • C++项目之酒店客房管理系统架构——设计模式应用场景详解(下)
  • RabbitMQ消息存储JSON格式反序列化
  • Java解决统计有序矩阵中的负数问题
  • 【算法与数据结构】435、LeetCode无重叠区间
  • 【开题报告】基于SpringBoot的茶文化宣传网站设计与实现
  • 用通俗易懂的方式讲解大模型:基于 Langchain 和 ChatChat 部署本地知识库问答系统
  • YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)
  • uni-appcss语法
  • java在线票务系统(选座)Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • Python 简易图形界面库easygui 对话框大全(续)
  • 电容器50ZLH56MEFC6.3X11
  • vscode 支持c,c++编译调试方法
  • MyBatis的缓存!!!!
  • ToB还是ToC?工业级与消费级AR眼镜都能干什么?