ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

选择排序算法详解(含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²))
适用场景交换代价大时对稳定性要求高时

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

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

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

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

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

🧠七、总结

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

返回列表