1.4 选择排序
大约 2 分钟
1.4 选择排序
---1. 选择排序算法思想
选择排序(Selection Sort)基本思想:
将数组分为两个区间:左侧为已排序区间,右侧为未排序区间。每趟从未排序区间中选择最小的元素,放到已排序区间的末尾。
选择排序是一种简单直观的排序算法,实现简单,易于理解。
2. 选择排序算法步骤
假设数组长度为 ,选择排序的算法步骤如下:
- 初始状态:已排序区间为空,未排序区间为 。
- 第 趟选择( 从 开始):
- 在未排序区间 中找到最小元素的位置 。
- 将位置 的元素与位置 的元素交换。
- 此时 为已排序区间, 为未排序区间。
- 重复步骤 2,直到未排序区间为空,排序完成。
以数组 为例,演示一下选择排序的算法步骤。
<1>

<2>

<3>

<4>

<5>

<6>

<7>

3. 选择排序代码实现
class Solution:
def selectionSort(self, nums: [int]) -> [int]:
n = len(nums)
for i in range(n - 1):
# 找到未排序区间中最小元素的位置
min_i = i
for j in range(i + 1, n):
if nums[j] < nums[min_i]:
min_i = j
# 交换元素
if i != min_i:
nums[i], nums[min_i] = nums[min_i], nums[i]
return nums
def sortArray(self, nums: [int]) -> [int]:
return self.selectionSort(nums)
4. 选择排序算法分析
指标 | 复杂度 | 说明 |
---|---|---|
最佳时间复杂度 | 无论数组状态如何,都需要 次比较 | |
最坏时间复杂度 | 无论数组状态如何,都需要 次比较 | |
平均时间复杂度 | 选择排序的时间复杂度与数据状态无关 | |
空间复杂度 | 原地排序,只使用常数空间 | |
稳定性 | ❌ 不稳定 | 交换操作可能改变相等元素的相对顺序 |
适用场景:
- 数据量较小()
- 对空间复杂度要求严格的场景
5. 总结
选择排序是一种简单直观的排序算法,通过不断选择未排序区间的最小元素来构建有序序列。
优点:实现简单,空间复杂度低,交换次数少
缺点:时间复杂度高,不适合大规模数据
练习题目
0912. 排序数组(选择排序会超时,仅作练习)