原理
遍历给定的无序序列, 将选中的最小的元素添加到已排好序的序列中, 直到序列中所有元素都在正确位置
算法步骤
选择排序的核心思想是在原数组中构建一个有序的数组,遍历整个数组,在每个索引位置选择数组中此位置后的最小元素
动态演示
代码实现
# python
for index in range(len(array)):
# 初始化min_idx 为当前位置的索引
min_idx = index
# 遍历当前位置后的所有元素
for j in range(index + 1, len(array)):
# 找到最小元素的索引
if array[min_idx] > array[j]:
# 将其赋值给min_idx
min_idx = j
# 将当前位置的元素与找到的最小元素进行交换,确保当前位置的元素是当前范围内的最小值
array[index], array[min_idx] = array[min_idx], array[index]
// golang
n := len(array)
for i := 0; i < n - 1; i++ {
min_idx = i
for j := i + 1; j < n; j++ {
if array[min_idx] > array[j] {
min_idx = j
}
}
array[i], array[min_idx] = array[min_idx], array[i]
}
算法特点
- 简单直观:选择排序是一种直观简单的排序算法,易于理解和实现
- 不稳定性:在交换过程中可能改变相同元素的相对位置,导致不稳定性
- 时间复杂度:选择排序的时间复杂度为O(n^2),不适合对大规模数据进行排序
- 空间复杂度:选择排序是一种原地排序算法,只需要常数级别的额外空间
- 不适合大规模数据:由于时间复杂度较高,选择排序不适合对大规模数据进行排序,效率较低
- 适用场景:适用于数据量较小或者对稳定性不敏感的场景
对大规模数据进行排序,效率较低 - 适用场景:适用于数据量较小或者对稳定性不敏感的场景