小白向-用python实现选择排序

ops/2025/3/1 10:20:04/

一、选择排序的定义

选择排序(Selection Sort)是一种不稳定原地比较排序,它的核心思想是每轮遍历选择最小(或最大)元素放入合适位置,最终完成排序。该算法适用于小规模数据排序,尤其是在对数据稳定性要求不高的场景中。


二、选择排序的发展历史

选择排序最早由计算机科学家提出,作为最基本的排序算法之一,它在计算机科学教育中被广泛用于教学。虽然在实际应用中不如快速排序等高效算法常用,但其直观的选择过程使其成为算法学习的基础。


三、选择排序的排序过程

选择排序的基本步骤如下:

  1. 遍历数组,找到最小元素:从数组未排序部分选出最小(或最大)元素;
  2. 交换元素:将最小(或最大)元素与当前遍历的起始位置元素进行交换;
  3. 重复上述步骤:逐轮确定一个最小值,并放置在正确的位置,直到整个数组有序。

例如,对 [64, 25, 12, 22, 11] 进行升序排序:

初始数组:[64, 25, 12, 22, 11]
第一轮: 选择 11,交换后 [11, 25, 12, 22, 64]
第二轮: 选择 12,交换后 [11, 12, 25, 22, 64]
第三轮: 选择 22,交换后 [11, 12, 22, 25, 64]
第四轮: 选择 25,交换后 [11, 12, 22, 25, 64]
最终结果:[11, 12, 22, 25, 64]

可以看到,每轮都找到了最小元素,并将其交换到正确的位置。


四、选择排序的基本原理

选择排序的核心思想是不断选择未排序部分的最小值,并与当前轮次的起始元素进行交换。
其原理可以概括如下:

  1. 假设前 i 个元素已排序,从未排序的 n - i 个元素中找到最小值;
  2. 将最小值放在第 i,确保前 i + 1 个元素已经排序;
  3. 重复 n-1,最终数组有序。

算法的时间复杂度为 O(n²),空间复杂度为 O(1),因为它只使用了少量额外的变量。


五、选择排序的特点

  1. 不稳定:当某个最小元素被交换时,可能会改变相等元素的相对顺序。
  2. 时间复杂度恒定:无论初始数据是否有序,选择排序始终执行 O(n²) 级别的比较操作。
  3. 空间占用小:不需要额外的辅助存储空间,仅使用常数级别的辅助变量。

六、选择排序的优点

  1. 交换次数少:相比冒泡排序,选择排序的交换次数较少,每轮最多一次交换,提高了效率;
  2. 适用于小规模数据排序:在数据量较小时,仍然可以较快完成排序;
  3. 不依赖数据初始状态:无论数据是否有序,选择排序的执行流程一致。

七、选择排序的缺点

  1. 时间复杂度高:无论数据是否已部分有序,选择排序始终需要 O(n²) 次比较;
  2. 不稳定:如果相同元素被交换,可能会打乱其原始相对顺序;
  3. 不适用于大规模数据:在数据量较大时,选择排序的效率较低,不如快速排序归并排序等高效算法

Python 代码实现

def selection_sort(arr):n = len(arr)for i in range(n):min_idx = i  # 记录当前轮次的最小元素索引for j in range(i + 1, n):  # 遍历未排序部分if arr[j] < arr[min_idx]:  min_idx = j  # 更新最小值索引arr[i], arr[min_idx] = arr[min_idx], arr[i]  # 交换当前元素和最小元素return arr# 测试
print(selection_sort([64, 25, 12, 22, 11]))

代码解析

  • 外层循环 (for i in range(n)):遍历整个数组,确定当前位置的元素;
  • 内层循环 (for j in range(i+1, n)):从未排序部分找最小值;
  • min_idx = j:更新最小值的索引;
  • arr[i], arr[min_idx] = arr[min_idx], arr[i]:找到最小值后进行交换。

代码运行结果

[11, 12, 22, 25, 64]


总结

选择排序通过不断寻找最小元素并交换位置,实现数组的排序。虽然它具有较好的直观性,但由于其时间复杂度较高,不适合大规模数据处理。它的优势在于较少的交换次数,但劣势是不稳定且对已排序数组没有优化。


http://www.ppmy.cn/ops/162213.html

相关文章

iOS自归因详细介绍

iOS自归因详细介绍 自归因&#xff08;Self-Attribution&#xff09;是指应用或广告平台通过分析用户行为数据&#xff0c;确定用户安装应用的来源渠道。在iOS生态中&#xff0c;由于隐私政策的限制&#xff08;如App Tracking Transparency&#xff0c;ATT&#xff09;&#…

计算机网络-双绞线制作

实验步骤 知识准备&#xff1a; 568A的排线顺序从左到右依次为&#xff1a;绿白、绿、橙白、蓝、蓝白、橙、棕白、棕。568B的排线顺序从左到右依次为&#xff1a;橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。交叉线是指&#xff1a;一端是568A标准&#xff0c;另一端是568B标准…

04、Hadoop3.x从入门到放弃,第四章:Hdfs基本概念与操作

Hadoop3.x从入门到放弃&#xff0c;第四章&#xff1a;Hdfs基本概念与操作 一、Hdfs概述 1、Hdfs产生背景与定义 随着数据量越来越大&#xff0c; 在一个操作系统存不下所有的数据&#xff0c; 那么就分配到更多的操作系统管理的磁盘中&#xff0c; 但是不方便管理和维护&am…

Vue中引入bootstrap框架

方式一&#xff1a;CDN引入: 所谓cdn引入&#xff0c;本人理解是在当前界面中引用远程服务器中的bootstrap文件夹中的css/js文件&#xff0c;那么在第一次加载的时候会非常慢&#xff0c;因为它依赖于网络速度去下载文件&#xff0c;然而第二次运行界面的时候加载非常的快&…

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用

文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取&#xff1a;二、数据预处理&#xff08;ArcGIS Pro及…

ECS单机部署Hadoop

ECS单机部署Hadoop 系统准备 更新系统 sudo yum update -y sudo yum install -y wget vim net-tools openssh-server关闭防火墙 sudo systemctl stop firewalld -- 关闭防火墙 sudo systemctl disable firewalld -- 禁止自启动 sudo systemctl status firewalld -- 查看防…

AIGC生图产品PM必须知道的Lora训练知识!

hihi&#xff0c;其实以前在方向AIGC生图技术原理和常见应用里面已经多次提到Lora的概念了&#xff0c;但是没有单独拿出来讲过&#xff0c;今天就耐心来一下&#xff01; &#x1f525; 一口气摸透AIGC文生图产品SD&#xff08;Stable Diffusion&#xff09;&#xff01; 一、…

蓝桥杯备赛 Day9 构造

构造 1.要点 考察总结归纳能力&#xff0c;没有固定解法 2.题目 2023平方差 (1)找到规律先存到set里面&#xff0c;然后要考虑最大开到1e6&#xff0c;然后暴力能得70分 (2)再观察规律&#xff0c;y为奇数或者偶数,z为奇数或者偶数&#xff0c;可以得到满足条件的为奇数和…