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

news2024/11/26 0:27:51

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 arr

list = [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.coloradmin.cn/o/1342973.html

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

相关文章

Spring AOP—深入动态代理 万字详解(通俗易懂)

目录 一、前言 二、动态代理快速入门 1.为什么需要动态代理? : 2.动态代理使用案例: 3.动态代理的灵活性 : 三、深入动态代理 1.需求 : 2.实现 : 2.1 接口和实现类 2.2 提供代理对象的类 2.3 测试类 3.引出AOP : 四、总结 一、前言 第四节内容&…

学习笔记|电动汽车上CAN报文解析

电动汽车,以电池和电机系统取代了内燃机汽车的发动机系统,使得汽车上主要的结构和电气件发生了很大变化。在传统汽车上已经比较成熟的CAN总线技术,电动汽车仍然需要作出必要调整才能够使用。 1 电动汽车的CAN协议 常用车辆CAN总线通讯协议&a…

【数据结构】排序之插入排序

排序目录 1.前言2. 排序的概念及其运用2.1 排序的概念2.2 排序的运用2.3 常见的排序算法 3. 插入排序3.1 基本思想3.2 直接插入排序3.2.1 直接插入排序实现3.2.1.1 分析3.2.1.2 代码实现 3.3 希尔排序3.3.1 希尔排序实现3.3.1.1 分析3.3.1.2 代码实现 4. 附代码4.1 sort.h4.2 s…

【第七在线】为什么智能商品管理是对传统商品管理模式的颠覆?

智能商品管理确实在一定程度上颠覆了传统的商品管理模式。传统商品管理通常依赖于人工的经验和决策,而智能商品管理则利用人工智能和相关技术来提供更智能化和高效化的解决方案。 智能商品管理通过数据分析和预测能力,可以更准确地预测市场需求和销售趋…

AI智能分析网关V4区域人数超员算法模型的应用原理及使用场景

视频AI智能分析技术已经深入到人类生活的各个角落,与社会发展的方方面面紧密相连。从日常生活中的各种场景,如人脸识别、车牌识别,到工业生产中的安全监控,如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

医院绩效考核系统源码,java源码,商业级医院绩效核算系统源码

医院绩效定义: “医院工作量绩效方案”是一套以工作量(RBRVS,相对价值比率)为核算基础,以工作岗位、技术含量、风险程度、服务数量等业绩为主要依据,以工作效率和效益、工作质量、患者满意度等指标为综合考…

D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点:● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…

MAC运行Windows专用软件 CrossOver v23.7.1中文版 macOS

CrossOver v23.7.1中文版是一款系统兼容软件,让您可以在 Mac 和 Linux 系统上运行 Windows 应用,不必购买 Windows 授权,不必重启系统,不必使用虚拟机。通过 CrossOver, 您可以从 dock 直接启动 Windows 应用&#xff…

WEB 3D技术 three.js 色彩空间讲解

上文 WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图 我们讲了基础材质的各种纹理 但是 我们的图片 到了界面场景中 好像绿的程度有点不太一样了 这里的话 涉及到我们的色彩空间 他有两种 一种是线性的 一种是 sRGB类型的 线性呢 就是根据光照强度 去均匀分…

nodejs+vue+ElementUi农产品团购销售系统zto2c

目标是为了完成小区团购平台的设计和实现,在疫情当下的环境,方便小区业主购入生活所需,减小居民的生活压力 采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采…

OrientDB使用教程:全面了解图数据库

图数据库在当今数据处理领域中扮演着越来越重要的角色,而OrientDB作为一种多模型的数据库,具有图数据库、文档数据库和对象数据库的特性,为应对不同场景提供了灵活的解决方案。本教程将简要介绍OrientDB的使用,包括基本概念、安装…

3-链表-删除链表的倒数第 N 个结点

这是链表的第三篇算法,力扣链接。 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1],…

为什么TCP会粘包

硬核图解|tcp为什么会粘包?背后的原因让人暖心 数据包报文格式(IP包、TCP报头、UDP报头) TCP,Transmission Control Protocol。传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP粘包是指发…

vue2中使用百度地图BMapGL

1、npm 命令安装 npm install vue-bmap-gl --save2、main.js 中文件引入 import VueBMap from vue-bmap-gl import vue-bmap-gl/dist/style.css VueBMap.initBMapApiLoader({// 百度的keyak:*********,// 这个密钥请使用自己注册的 }) Vue.use(VueBMap)3、页面调用 <temp…

一篇文章带你入门PHP魔术方法

PHP魔术方法 PHP 中的"魔术方法"是一组特殊的方法&#xff0c;它们在特定情况下自动被调用。这些方法的名称都是以两个下划线&#xff08;__&#xff09;开头。魔术方法提供了一种方式来执行各种高级编程技巧&#xff0c;使得对象的行为可以更加灵活和强大。以下是一…

SourceTree的安装和使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装&#xff1a;二、使用步骤1.获取地址2.放入sourceTree 3.点击推送 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 简单讲解一…

F12开发者工具如何找到对应接口

Web问题定位 1、进入 NetWork页面2、点击Fetch/XHR&#xff0c;这里可以看到页面发起的接口3、找到出问题的接口4、NetWork页面怎么看接口详情5、问题定位 最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。…

【27.5K⭐】Spacedrive:功能强大且便捷的跨平台文件管理器

【27.5K⭐】Spacedrive&#xff1a;功能强大且便捷的跨平台文件管理器 在日常生活和工作中&#xff0c;我们经常需要使用不同的设备和云存储服务来存储和管理我们的文件。然而&#xff0c;这样做往往会导致文件的分散、重复和混乱&#xff0c;给我们带来不便和困扰。那么&…

免费在线客服软件推荐:经济实用的客户沟通解决方案

好用的在线客服软件是企业是必不可少的工具&#xff0c;他让企业流程更流畅高效&#xff0c;让客户服务更完善优质。市场上的在线客服软件有很多&#xff0c;说着免费使用的软件也不在少数。今天小编就来推荐一款免费在线客服软件。 不过&#xff0c;我们选择免费在线客服软件…

如何让python在手机上运行,python程序在手机上运行

大家好&#xff0c;给大家分享一下python怎么在手机上运行爱心代码&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1. 写在前面的话 天天都在PC端运行Python代码的我&#xff0c;今天突然灵光一现&#xff0c;想着是不是能够在移动端运行P…