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

选择排序算法详解(含Python实现)

选择排序(Selection Sort)是最基础的排序算法之一,虽然效率不高,但逻辑简单、易于实现,非常适合排序入门学习。本文将详解其原理、执行过程、Python代码、复杂度分析等内容。

📌一、算法原理

核心思想

每一轮从待排序区间中找出最小(或最大)元素,放到已排序区间的末尾,重复进行。

流程如下:

  1. 每次遍历剩余数组,找到当前最小值的下标。

  2. 与当前轮的起始位置交换。

  3. 重复 n 次后,整个数组即为有序。

🧪二、Python 代码实现(选择排序)

以下是我写的代码:

def select_sort(arr):n = len(arr)for i in range(n):min_index = i# 在 [i+1, n) 中找最小元素的下标for j in range(i + 1, n):if arr[j] < arr[min_index]:min_index = j# 交换当前位置和最小值的位置arr[i], arr[min_index] = arr[min_index], arr[i]return arr# 示例数组
arr = [29, 10, 14, 37, 13]
print('select_sorted:', select_sort(arr))

输出示例: 

select_sorted: [10, 13, 14, 29, 37]

🔍三、代码过程详解

[29, 10, 14, 37, 13] 为例:

第1轮:

  • 起始索引 i = 0,最小值为 10(索引1)

  • 交换 29 和 10 → [10, 29, 14, 37, 13]

第2轮:

  • i = 1,最小值为 13(索引4)

  • 交换 29 和 13 → [10, 13, 14, 37, 29]

第3轮:

  • i = 2,最小值为 14 → 无需交换

第4轮:

  • i = 3,最小值为 29(索引4)

  • 交换 37 和 29 → [10, 13, 14, 29, 37]

⏱️四、时间复杂度分析 

情况时间复杂度说明
最好情况O(n²)仍需 n 次选择和比较
最坏情况O(n²)与最好一样,无法提前终止
平均情况O(n²)所有情况均需两层遍历
  • 空间复杂度:O(1),原地排序。

  • 稳定性:不稳定,例如 [5, 5, 3] 会交换两个 5 的相对位置。

🎯五、选择排序 vs 冒泡排序 

特性选择排序冒泡排序
是否稳定❌ 不稳定✅ 稳定
比较次数固定 O(n²)最好 O(n)
交换次数最少(O(n))最多(O(n²))
适用场景交换代价大时对稳定性要求高时

🔧六、选择排序的改进方向

尽管选择排序简单易懂,但其性能在大数据量场景中较差。改进方向包括:

  • 双向选择排序(每轮找最大和最小)

  • 使用堆结构替代线性扫描

  • 实际开发中,建议使用快排或内置排序

🧠七、总结

选择排序的思路是“先选最小,再放前面”,虽然效率不高,但非常适合初学者理解排序机制。掌握此算法是理解更复杂排序(如堆排序)的基础。

http://www.lryc.cn/news/582169.html

相关文章:

  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 阿里arthas(阿尔萨斯)简介
  • 安卓10.0系统修改定制化____recovery-from-boot.p文件的具体作用 在定制项目中的关联
  • v-for的用法及案例
  • 股票筹码分布及其数据获取
  • Swift 解 LeetCode 320:一行单词有多少种缩写可能?用回溯找全解
  • 深入解析TCP:可靠传输的核心机制与实现逻辑(三次握手、四次挥手、流量控制、滑动窗口、拥塞控制、慢启动、延时应答、面向字节流、粘包问题)
  • 沉浸式视频的未来:MV-HEVC与3D-HEVC技术深度解析
  • 【STM32】const 变量存储学习笔记
  • 6,Receiving Messages:@KafkaListener Annotation
  • 【网络】Linux 内核优化实战 - net.ipv4.ip_local_port_range
  • 【方案】前端UI布局的绝技,响应式布局,多端适配
  • 医疗AI底层能力全链条工程方案:从技术突破到临床落地
  • 如何排查服务器中已经存在的后门程序?
  • Java基础--封装+static
  • 软件工程功能点估算基础
  • 软件工程功能点估算法常用术语介绍
  • jmm-内存屏障
  • MMaDA:多模态大型扩散语言模型
  • 边缘计算新底座:基于VPP+DPDK的开放智能网关
  • kafka总结
  • AI + 数据治理的趋势:让治理更智能、更敏捷
  • Web Worker:让前端飞起来的隐形引擎
  • 七牛云Java开发面试题及参考答案(60道面试题汇总)
  • 【C语言】指针与回调机制学习笔记
  • 1-Kafka介绍及常见应用场景
  • CAIDCP AI驱动安全专家认证将于8月正式上线,首期班开始报名
  • c++-引用(包括完美转发,移动构造,万能引用)
  • Qt中的坐标系
  • 算法————模拟算法