Python中排序算法之选择排序

news2024/9/24 13:19:22

选择排序算法是对《Python中排序算法之冒泡排序》中提到的冒泡排序算法的改进。

1 选择排序原理

选择排序是在参加排序的所有元素中找到数值最小(或最大)的元素,如果它不是左侧第一个元素,就使它与左侧第一个元素中的数据相互交换位置;然后在余下的元素中找出数值最小(或最大)的元素,如果它不是左侧第二个元素,就与左侧第二个元素的数据交换位置,以此类推,直到所有元素成为一个有序的序列。

2 选择排序的手动实现

假设数列中有“8、5、9、3、6”这5个数,使用选择排序算法对该数列进行升序(从小到大)排列,如图1所示。

图1 原始数列

首先,找出“8、5、9、3、6”这5个数中的最小数“3”,之后将“3”放在数列的最左端,如图2所示。

图2 第一次排序

注意1 “1 选择排序原理”中提到的是数列中最小数与数列左侧第一个数交换位置,得到两个子数列,如图2中红框和绿框中的数列。我们想得到的最终升序数列是红框中的子序列,绿框中子数列中数字的排列顺序对不影响最后的结果,也就是说,绿框中的数列顺序是“8、5、9、6”还是“5、9、8、6”,不影响最终的排序。

接下来在绿框中的数列中找出其最小值“5”,然后把“5”放到红框数列的尾部,如图3所示。

图3 第二次排序

之后继续在绿框的数列中查找最小值,放到红框数列的尾部,最终红框数列即为得到的升序数列,如图4所示。

图4 接下来的排序

注意2 使用选择排序算法对n个数字进行排序时,需要排n-1次。

注意3 选择排序的排序次数与冒泡排序相同,但是交换数字位置的次数要比冒泡排序少,因此它具有更高的效率。

3 选择排序的编码实现

通过图5所示的代码实现选择排序。

图5 选择排序的代码实现

其中,第1行为原始的数列;第2行的for循环为排序的次数;第3行中的变量k表示绿框序列中最小值的下标,将其初始值设置为i,即绿框中左侧第一个数的下标;第4-6行通过for循环找到绿框数列中的最小值,并将其下标保存到变量k中;如果最小值就是绿框中左侧第一个数,则此时无需交换数字的位置,如果最小值不是绿框中左侧第一个数,如第7行代码所示,则交换两个数的位置,如代码第8行所示。程序运行的结果如图6所示。

图6 程序运行的结果

相关链接1 通过选择排序算法实现降序(从大到小)的代码,只需将图5第5行中的“>”换成“<”即可。

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

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

相关文章

CKKWWKKW-Dip-K-NH2;LTX-315;巯基化修饰溶瘤肽;CAS:1345407-05-7

【CKKWWKKW-Dip-K-NH2 简介】 CKKWWKKW-Dip-K-NH2&#xff0c;也被称为LTX-315&#xff0c;是一种具有抗癌活性的溶瘤肽。分子量为1439.79&#xff0c;分子式为C78H106N18O9。氨基酸序列为Lys-Lys-Trp-Trp-Lys-Lys-Trp-Dip-Lys-NH2。LTX-315被发现对多种癌细胞具有抑制作用&…

Git之1.5版本重要特性及用法实例(五十三)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

Java 使用 POI 导出Excel,设置同一个单元格的内容显示不同的文字颜色

在使用Apache POI的库生成Excel的时候&#xff0c;如何在一个Cell中的文字中显示不同的颜色&#xff1f;下面是一个示例代码&#xff0c;演示如何在单元格中设置不同颜色的文本。 代码 // 创建工作簿和工作表 Workbook workbook new XSSFWorkbook(); Sheet sheet workbook.c…

鸿蒙OS试题(7)

46在组件中&#xff0c;经常需要使用字符串、图片等资源。HSP中的组件需要使用资源时&#xff0c;一般将其所用资源放在HSP包内&#xff0c;而非放在HSP的使用方处&#xff0c;以符合高内聚低合的原则。下面访问HSP资源错误的是 A.通过$r访问HSP中的资源。lmage($r(app.media.…

免费分享:2020年全球10m分辨率红树林(附下载方法)

Google Earth Engine (GEE) 是一个强大的云端地理信息处理平台&#xff0c;‌由Google与卡内基美隆大学和美国地质调查局共同开发。‌ 它提供了一个存取卫星图像和其他地球观测数据数据库的途径&#xff0c;‌并具备足够的运算能力来处理这些数据。‌ MSIC算法是指基于时间序列…

SCI FI SHOOTER CHARACTERS PACK VOL 1

这个包是科幻射击角色包第一卷的升级版。如果您已经拥有旧版本,您可以使用升级路径,从降价中受益,并享受升级后的版本*** 此包包含11个SCi FI角色,可随时填充您的项目: 外星步兵 外国雇佣兵 外星特种部队通灵者 外星赏金猎人 外星战争老兵 外星战士 人类太空海盗兵 海盗中…

【运维】解决Ubuntu 22.04 desktop版本打不开终端

问题 我是在Visual Box中创建的虚拟机&#xff0c;基于Ubuntu 22.04.4 desktop amd64版本。创建之后&#xff0c;在应用列表中打开terminal&#xff0c;并没有启动&#xff0c;过一会&#xff0c;程序自动退出 解决 这种一般都是语言和地区设置的不一致 比如&#xff1a;地区…

Linux上安装Conda以管理Python环境

在Windows下装了Linux发行版Debian&#xff0c;以后不用来回开启VMware啦&#xff01;并在Debian中安装了Conda,记录一下所需命令(其他版本如Ubuntu中安装是一样的命令)。 目录 1.WSL 2.安装Conda 3.Python环境配置 1.WSL Install WSL | Microsoft Learn 微软官网 ①以管理…

让视频播放更智能、更流畅!开源视频播放器项目GSYVideoPlayer

GSYVideoPlayer&#xff1a;简单、强大、灵活。一切尽在GSYVideoPlayer - 精选真开源&#xff0c;释放新价值。 概览 GSYVideoPlayer是一个为Android应用开发者提供的开源视频播放解决方案。它通过提供一套简洁直观的API&#xff0c;使得视频播放功能的集成变得简单快捷。开发…

六西格玛培训教你用多变量分析找问题根源——张驰咨询

在六西格玛培训的殿堂里&#xff0c;多变量分析不仅是学员们掌握的一项关键技能&#xff0c;更是他们通往卓越绩效之路上的一把重要钥匙。这门深奥而强大的工具&#xff0c;不仅拓宽了学员们的数据分析视野&#xff0c;还为他们提供了在复杂系统中寻找最优解、实现持续改进的能…

Oracle ADG切换检查及操作

一、配置检查 1、数据库名称及log_archive_config检查 使用命令 show parameter name; show parameter log_archive_config; 查看点 查看数据库db_unique_name、db_name、service_names 设置查看log_archive_config是否配置了正确的生产及容灾db_unique_name 确认点 生…

Spring Cloud Open Feign 超时配置及源码分析

前言&#xff1a; 在开发 Spring Cloud 微服务项目时候&#xff0c;Feign 调用是非常常见的&#xff0c;Feign 调用的底层还是 HTTP 的远程调用&#xff0c;会有超时问题&#xff0c;如果没有搞清楚超时问题&#xff0c;生产环境的调用肯那个会有种种问题出现&#xff0c;本篇…

pymysql cursor使用教程

Python之PyMySQL的使用&#xff1a; 在python3.x中&#xff0c;可以使用pymysql来MySQL数据库的连接&#xff0c;并实现数据库的各种操作&#xff0c;本次博客主要介绍了pymysql的安装和使用方法。 PyMySQL的安装 一、.windows上的安装方法&#xff1a; 在python3.6中&…

图像字幕Image Captioning——使用语法和语义正确的语言描述图像

1. 什么是图像字幕 Image Captioning&#xff08;图像字幕生成&#xff09; 是计算机视觉和自然语言处理&#xff08;NLP&#xff09;领域的一个交叉研究任务&#xff0c;其目标是自动生成能够描述给定图像内容的自然语言句子。这项任务要求系统不仅要理解图像中的视觉内容&…

NLP从零开始------文本中阶序列处理之语言模型(完整版)

语言模型( language model) 用于计算一个文字序列的概率&#xff0c; 评估该序列作为一段文本出现在通用或者特定场景中的可能性。每个人的语言能力蕴涵了一个语言模型&#xff0c;当我们说出或写下一段话的时候&#xff0c;已经在不自觉地应用语言模型来帮助我们决定这段话中的…

ceph-rgw zipper的设计理念(2)

本文简介 书接上文。本文以CreateBucket为例进行详细讲述设计理念以及接口变化趋势。 1、接收请求和协议处理请求 rgw_asio_frontend.cc 主要功能&#xff1a;回调函数注册和请求处理 void handle_connection(boost::asio::io_context& context,RGWProcessEnv& env…

如何使用IDEA搭建Mybatis框架环境(详细教程)

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 &#x1f379;一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 &#x1f9cb;二、 MyBatis框架的优缺…

GAN Inversion(GAN 反演)

什么是Inversion&#xff1f; 来龙去脉&#xff1a; 在生成过程中&#xff0c;我们通过将z输入G&#xff0c;然后得到图像&#xff0c;但是你这个Z是不定的&#xff08;随机的高斯分布噪声&#xff09;&#xff0c;所以即使你得到了质量好的生成图像&#xff0c;但是依然无法…

页面间对象传递的几种方法

页面间对象传递的几种方法 1. 使用request对象传递2. 使用session对象传递3. 使用application对象传递4. 使用cookie传递 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;页面间的数据传递是一个常见的需求。本文将…

Java | Leetcode Java题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目&#xff1a; 题解&#xff1a; class RandomizedCollection {Map<Integer, Set<Integer>> idx;List<Integer> nums;/** Initialize your data structure here. */public RandomizedCollection() {idx new HashMap<Integer, Set<Integer>>…