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 是数组的长度。与冒泡排序一样,选择排序不是最高效的排序算法,但它是一种简单易懂的算法,适用于小型数据集。

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

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

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

相关文章

Android 自定义View一

1.继承已有VIew&#xff0c;改写尺寸&#xff1a;重写onMeasure SquareImageView 2.完全自定义重写onMeasure 3.自定义Layout 重写onMeasure onLayout 1.继承已有VIew&#xff0c;改写尺寸&#xff1a;重写onMeasure 流程&#xff1a; 重写onMeasure 用getmeasureedWidth …

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关&#xff0c;那么这种方法确实足够了。 但是&#xff0c;仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

【Spring】配置文件-properties和xml

文章目录 1. 前言2. properties配置文件3. xml配置文件4. 总结 1. 前言 在Spring中,配置文件有两种,properties配置文件和xml配置文件 properties配置文件&#xff0c;在Java编程中是一种常见的配置文件形式&#xff0c;文件后缀为“.properties”&#xff0c;属于文本文件。它…

Java中的23种设计模式

一、创建型模式1.单例模式 单例模式是 Java 中最简单的设计模式之一。通过单例模式&#xff0c;可以保证系统中&#xff0c;应用了单例模式的类&#xff0c;只有一个对象实例。包括五种&#xff1a;饿汉式、懒汉式、双重校验、静态内部类、枚举类。 1.1 饿汉式 特点:类加载时…

typeScript的类型等级

1.首先安装typeScript npm install typescript 2.方便学习安装一个types/node方便编译ts npm install types/node 可以直接使用命令 ts-node index.ts 准备工作完成&#xff01;&#xff01;&#xff01; 类型的等级 1&#xff1a;any unknown //顶级的类型 2: Object …

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

linux导入、导出数据库sql语句

导入数据库 1、首先建空数据库 mysql>create database abc;2、导入数据库 方法一&#xff1a; &#xff08;1&#xff09;选择数据库 mysql>use abc;&#xff08;2&#xff09;设置数据库编码 mysql>set names utf8;&#xff08;3&#xff09;导入数据&#xff0…

Vue+elementui 纯前端实现Excel导入导出功能(区分表头标题)

引入插件 import * as XLSX from "xlsx/xlsx.mjs"; import { read, utils } from xlsx/xlsx.mjs; 上传文件方法 // 上传文件状态改变时的钩子&#xff0c;添加文件、上传成功和上传失败时都会被调用async handle(ev) {//改变表格key值this.$refs.cpkTable.loading…

git pull 时每次都要输入用户名和密码的解决办法

解决办法&#xff1a; git bash进入你的项目目录&#xff0c;输入&#xff1a; git config credential.helper store

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路&#xff0c;走好每一步&#xff0c;身体是本钱&#xff0c;平安是财富&#xff0c;开心就是护身符&#xff0c;健康才是摇钱树。新的一天&#xff0c;事事顺意&#xff01; 晨起福门开&#xff0c;快乐安康在&#xff0c;愉悦心态好&#xff0c;生活充满爱&#xf…

Qt报错整理-Q_DECLARE_METATYPE

1、Q_DECLARE_METATYPE 进行数据绑定时候&#xff0c;出现这个bug错。 error: C2338: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt。 原因&#xff1a;使用了QVariant::fromValue(user)&#xff0c;QVariant对象使用前需进行类…

DeepXDE学习笔记【1】——简单ODE方程求解

DeepXDE学习笔记【1】——简单ODE方程求解 1、背景 物理信息神经网络(PINN)自从2017年被提出&#xff0c;其应用范围在近两年也被挖掘的越来越广泛&#xff0c;除了可以解决物理方面的问题&#xff0c;信号处理、工程评估等等方向也开始有所涉及&#xff0c;所谓“物理数据双…

【软考】14.3 设计模式

《设计模式》 有下划线&#xff1a;类模式 / 对象模式无下划线&#xff1a;对象模式 创建型 设计模式 创建对象 构建器&#xff08;Builder&#xff09;&#xff1a;类和构造分离抽象工厂&#xff08;Abstract Factory&#xff09;&#xff1a;抽象接口工厂&#xff08;Factor…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后&#xff0c;执行如下命令 brew install nginx注意&#xff1a;Nginx安装成功后会提示目录位置&#xff1b;每个人的系统可能因为Homebrew的安装位置…

【Linux学习笔记】进程概念(下)

进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include <stdio.h> #include <unistd.h>int global_value 100;int main() {pid_t id fork();if(id &l…

前端CSS

文章目录 引入标签的两大重要属性&#xff1a;区分标签class属性id属性学习CSS流程 CSS前言CSS层叠样式表1.CSS组成2.css语法结构3.注释语法4.引入css的多种方式 CSS选择器1.CSS基本选择器2.CSS组成选择器3.分组与嵌套4.属性选择器5.伪类选择器6.伪元素选择器 选择器优先级CSS继…

基于深度学习的水果识别 计算机竞赛

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

什么情况会造成电表不走数?

电表是衡量用电量的重要设备&#xff0c;一旦出现不走数的情况&#xff0c;不仅会影响用户对用电量的准确计算&#xff0c;还可能造成电费纠纷。那么&#xff0c;究竟什么情况下会造成电表不走数呢&#xff1f;接下来&#xff0c;小编来为大家介绍下&#xff0c;一起来看下吧&a…

傅里叶分析和小波分析

从傅里叶变换到小波变换&#xff0c;并不是一个完全抽象的东西&#xff0c;可以讲得很形象。小波变换有着明确的物理意义&#xff0c;如果我们从它的提出时所面对的问题看起&#xff0c;可以整理出非常清晰的思路。 下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺…