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

Python算法——选择排序

选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是在未排序的部分中选择最小(或最大)的元素,然后将其放在已排序部分的末尾。选择排序不同于冒泡排序,它不需要反复交换元素,因此在某些情况下可能比冒泡排序更快。本文将详细介绍选择排序的工作原理和Python实现。

选择排序的工作原理

选择排序的基本思想是:

  1. 从未排序的数组中找到最小的元素。
  2. 将最小元素与未排序部分的第一个元素交换位置。
  3. 重复上述两步,不断扩大已排序部分,缩小未排序部分,直到整个数组有序。

选择排序的核心思想是每一轮选择一个最小的元素,并将它交换到已排序部分的末尾。这一过程持续多轮,每轮选择一个最小的元素,直到整个数组有序。

下面是一个示例,演示选择排序的过程。我们以升序排序为例:

原始数组:[64, 25, 12, 22, 11]

  1. 第一轮选择,最小元素为 11,交换位置后数组变为:[11, 25, 12, 22, 64]
  2. 第二轮选择,最小元素为 12,交换位置后数组变为:[11, 12, 25, 22, 64]
  3. 第三轮选择,最小元素为 22,交换位置后数组变为:[11, 12, 22, 25, 64]
  4. 第四轮选择,最小元素为 25,交换位置后数组变为:[11, 12, 22, 25, 64]
  5. 第五轮选择,最小元素为 64,交换位置后数组不变:[11, 12, 22, 25, 64]

Python实现选择排序

下面是Python中的选择排序实现:

def selection_sort(arr):n = len(arr)for i in range(n):min_index = ifor j in range(i+1, n):if arr[j] < arr[min_index]:min_index = jarr[i], arr[min_index] = arr[min_index], arr[i]
  • arr 是待排序的数组。
  • n 表示数组的长度。
  • 外层循环 for i in range(n) 用于控制遍历的轮数。
  • 内层循环 for j in range(i+1, n) 用于查找未排序部分中的最小元素。
  • min_index 用于记录最小元素的索引,如果找到更小的元素,更新 min_index。
  • 在内层循循环结束后,将最小元素与当前轮次的第一个元素交换位置。
示例代码

下面是一个使用Python进行选择排序的示例代码:

def selection_sort(arr):n = len(arr)for i in range(n):min_index = ifor j in range(i+1, n):if arr[j] < arr[min_index]:min_index = jarr[i], arr[min_index] = arr[min_index], arr[i]# 测试排序
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的数组:", arr)
时间复杂度

选择排序的时间复杂度为 O(n^2),其中 n 是数组的长度。与冒泡排序一样,选择排序不是最高效的排序算法,但它是一种简单易懂的算法,适用于小型数据集。

总之,选择排序是一种简单的排序算法,通过选择最小元素并将其放在已排序部分的末尾,实现了排序数组的目标。了解选择排序有助于理解排序算法的基本原理,并为学习更高效的排序算法奠定了基础。

相关文章:

Python算法——选择排序

选择排序&#xff08;Selection Sort&#xff09;是一种简单的排序算法&#xff0c;它的基本思想是在未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放在已排序部分的末尾。选择排序不同于冒泡排序&#xff0c;它不需要反复交换元素&#xf…...

从「码农」到管理者,E人程序员的十年蜕变

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 当我们谈论程序员创业时&#xff0c;常常会首先想到一些传统观念认为的挑战&#xff1a;沟通技巧不佳、逻…...

ant Java任务的jvmargs属性和<jvmarg>内嵌元素

ant的Java任务可以在运行Apache Ant的Java虚拟机内、或者启用另外的Java虚拟机运行一个Java类。 可以使用java任务的jvmargs属性&#xff0c;设置传递给在新进程中的java虚拟机的参数。但当java任务的fork禁用的时候&#xff0c;jvmargs属性会被忽略。jvmargs这个属性已经被废…...

XML External Entity-XXE-XML实体注入

XML 实体? XML 实体允许定义标签,在解析 XML 文档时这些标签将被内容替换。一般来说,实体分为三种类型: 内部实体 外部实体 参数实体。 必须在文档类型定义(DTD)中创建实体 一旦 XML 文档被解析器处理,它将js用定义的常量“Jo Smith”替换定义的实体。正如您所看到…...

生态扩展Spark Doris Connector

生态扩展Spark Doris Connector doris官网去查找相匹配的spark spark的安装&#xff1a; tar -zxvf spark-3.1.2-bin-hadoop3.2.tgzmv spark-3.1.2-bin-hadoop3.2 /opt/sparkspark环境配置&#xff1a;vim /etc/profile export SPARK_HOME/opt/spark export PATH$PATH:$SPAR…...

构建 hive 时间维表

众所周知 hive 的时间处理异常繁琐且在一些涉及日期的统计场景中会写较长的 sql&#xff0c;例如&#xff1a;周累计、周环比等&#xff1b;本文将使用维表的形式降低时间处理的复杂度&#xff0c;提前计算好标准时间字符串未来可能需要转换的形式。 一、表设计 结合业务场景常…...

Pycharm安装jupyter和d2l

安装 jupyter: jupyter是d2l的依赖库&#xff0c;没有它就用不了d2l pycharm中端输入pip install jupyter安装若失败则&#xff1a; 若网速过慢&#xff0c;则更改镜像源再下载&#xff1a; pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip …...

虹科案例 | AR内窥镜手术应用为手术节约45分钟?

相信医疗从业者都知道&#xff0c;在手术室中有非常多的医疗器械屏幕&#xff0c;特别是内窥镜手术室中医生依赖这些内窥镜画面来帮助病患进行手术。但手术室空间有限&#xff0c;屏幕缩放位置相对固定&#xff0c;在特殊场景下医生观看内窥镜画面时无法关注到病患的状态。这存…...

纳米银线 纳米银纳米线 平均直径: 50-100nm

&#xff08;西&#xff09;纳米银线 &#xff08;安&#xff09;含量&#xff08;%&#xff09;&#xff1a;99.9 &#xff08;瑞&#xff09;平均直径: 50-100nm &#xff08;20nm 30nm 60nm &#xff09; &#xff08;禧&#xff09;长度&#xff1a;10um …...

力扣labuladong——一刷day15

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣92. 反转链表 II二、力扣206. 反转链表 前言 一、力扣92. 反转链表 II /*** Definition for singly-linked list.* public class ListNode {* int…...

【开题报告】基于微信小程序的母婴商品仓储管理系统的设计与实现

1.研究背景 母婴商品是指专门为婴幼儿和孕产妇提供的各类产品&#xff0c;如婴儿奶粉、尿布、奶瓶、洗护用品等。随着社会经济的发展和人们对婴幼儿健康关注度的提高&#xff0c;母婴商品市场呈现出快速增长的趋势。同时&#xff0c;电子商务的兴起和互联网技术的发展&#xf…...

Faraday库

require faraday# 创建Faraday对象&#xff0c;使用作为代理服务器 proxy_host huake proxy_port 1111 faraday Faraday.new(:proxy > { :host > proxy_host, :port > proxy_port })# 使用Faraday对象发送GET请求到https://www.dianping.com/ response faraday.get…...

【原创】java+swing+mysql校园论坛管理系统设计与实现

摘要&#xff1a; 随着互联网技术的不断发展&#xff0c;论坛作为一种信息交流和互动的平台&#xff0c;在学校中发挥着越来越重要的作用。校园论坛管理系统是为了方便学校管理论坛、提高论坛的互动性和用户体验而设计的一款系统。一般的论坛网站都是B/S架构&#xff0c;也就是…...

endnote调整参考文献

endnote调整参考文献 1. 2. 3.自定义GBT7714!!!...

chap认证带客户端IP分配案例

PPP协议两边的网段可以不在同一个网段&#xff0c;因为数据链路帧用0xff表示帧&#xff0c;不用arp&#xff0c;所以可以不同网段。 R1&#xff1a; aaa local-user test password cipher admin local-user test service-type ppp interface Serial4/0/0 link-protocol ppp pp…...

算法笔记【8】-合并排序算法

文章目录 一、前言二、合并排序算法基本原理三、实现步骤四、优缺点分析 一、前言 合并排序算法通过采用分治策略和递归思想&#xff0c;实现了高效、稳定的排序功能。本文将深入探讨合并排序算法的原理、实现步骤&#xff0c;并讨论其优缺点。 二、合并排序算法基本原理 合…...

蓝桥杯每日一题2023.10.30

题目描述 日志统计 - 蓝桥云课 (lanqiao.cn) 题目分析 本题可以使用双指针来维护时间段的区间&#xff0c;在维护的时间段内确定是否为热帖 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; struct node {int t, id; }tiee…...

macOS M1安装wxPython报错‘tiff.h‘ file not found的解决方法

macOS12.6.6 M1安装wxPython失败&#xff1a; 报错如下&#xff1a; imagtiff.cpp:37:14: fatal error: tiff.h file not found解决办法&#xff1a; 下载源文件重新编译&#xff08;很快&#xff0c;5分钟全部搞定&#xff09;&#xff0c;分三步走&#xff1a; 第一步&…...

多路转接之epoll

本篇博客介绍&#xff1a; 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…...

删除排序链表中的重复节点II(C++解法)

题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示例 2&#xff1a; 输入&#xff1a;head [1…...

uniapp自定义tab切换css样式、uni-forms中input下拉等标签字体、过宽、溢出样式一系列调整(附加实战举例)

一、uniapp自定义tab切换css样式 <view class="tabs-container"><view class="tabs-list">...

windows server 2016-IIS静态服务器-设置详细过程

文章目录 1.打开仪表盘新建角色2.iis功能模块3.启动服务器4.优点 1.打开仪表盘新建角色 2.iis功能模块 能选上的尽量选上&#xff0c;除非知道自己用不上。 然后确认&#xff0c;下一步&#xff0c;安装。 3.启动服务器 搜索IIS&#xff0c;启动IIS管理器。 启动网站。 右…...

不一样的编程方式 —— 协程(设计原理与汇编实现)

主要通过以下9个方面来了解协程的原理&#xff1a; 目录 1、为什么使用协程 1.3、协程的适用场景 2、协程的原语操作 3、协程的切换 3.1、汇编实现 4.协程的运行流程 5.协程的结构体定义(我们其实可以参照线程或者进程的状态来设计) 5.1、多状态集合设计 6.协程的调度…...

Thinkphp6项目在虚拟机无法指向pulic的目录访问的方法

以阿里云虚拟主机为例&#xff0c;服务器环境为 LAMP&#xff0c;Apache2.4 php7.2 mysql5.7 1.根目录新建 index.php 文件&#xff0c;将以下内容放入文件中 <?php include ./public/index.php;2.将 public 目录下的 admin.php、backend 文件夹、static 文件夹、tinymc…...

数据结构(超详细讲解!!)第十八节 串(堆串)

1.定义 假设以一维数组heap &#xff3b;MAXSIZE&#xff3d; 表示可供字符串进行动态分配的存储空间&#xff0c;并设 int start 指向heap 中未分配区域的开始地址(初始化时start 0) 。在程序执行过程中&#xff0c;当生成一个新串时&#xff0c;就从start指示的位置起&#…...

idea集成测试插件替代postman

idea集成测试插件替代postman 兄弟萌&#xff0c;你再测试接口是否无bug是否流畅的时候是否还在使用“postman”来回切换进行测试呢&#xff1f; 页面切换进行测试&#xff0c;有没有感觉很麻烦呢&#xff1f; 打开postman&#xff0c;输入接口地址&#xff0c;有没有感觉很麻烦…...

clusterprolifer go kegg msigdbr 富集分析应该使用哪个数据集,GO?KEGG?Hallmark?

关注微信&#xff1a;生信小博士 5 Overview of enrichment analysis Chapter 5 Overview of enrichment analysis | Biomedical Knowledge Mining using GOSemSim and clusterProfiler 5.1.2 Gene Ontology (GO) Gene Ontology defines concepts/classes used to describ…...

Linux学习笔记1-入门

前言&#xff1a;之前的基于单片机的闭环控制步进电机项目其实已经完成了&#xff0c;但很多时间都花在调试和生产上&#xff0c;实在没时间去做总结笔记&#xff0c;现在又开始做新项目了&#xff0c;从单片机到了Linux&#xff0c;想用这个平台来督促自己继续学习&#xff0c…...

怎样更有效的运营Etsy店铺?

大家都知道&#xff0c;Etsy作为一个重要的电商平台&#xff0c;给很多人提供了不少机会。但是如何取得etsy店铺运营的成功呢&#xff1f;第一步就是选好辅助工具。 什么是指纹浏览器&#xff1f; VMLogin指纹浏览器(www.vmlogin.com.cn) 是一种工具&#xff0c;通过伪装用户…...

Vue 项目中如何使用Bootstrap5(简单易懂)

Vue 项目中如何使用Bootstrap5&#xff08;简单易懂&#xff09; 安装在 src/main.js 文件下引入包在vue文件中使用 Bootstrap官网&#xff08;中文&#xff09;&#xff1a;https://www.bootcss.com/ Bootstrap5文档&#xff1a;https://v5.bootcss.com/docs/getting-started/…...