选择排序(Selection Sort) 是一种简单直观的原地比较排序算法,思路非常好理解,也是学习排序算法的入门经典。
其基本思想是,每次从未排序部分里选出最小(或最大)的元素,放到已排序部分的末尾。
排序的整个过程可以分成两步重复:
(1)在未排序区间找到最小元素
(2)把它和未排序区间的第一个元素交换
这样每一轮都会确定一个元素的最终位置。
假设有数组:[5, 2, 9, 1, 5, 6]
第 1 轮:找最小 1 → 和第 1 位交换
[1, 2, 9, 5, 5, 6]
第 2 轮:在后面找最小 2 → 不动
第 3 轮:在后面找最小 5 → 和第 3 位交换
[1, 2, 5, 5, 9, 6]
第 4 轮:后面最小是 5 → 不动
第 5 轮:后面最小是 6 → 和 9 交换
[1, 2, 5, 5, 6, 9]
示例代码:
def selection_sort(arr):
# 复制列表,不修改原数组
arr = arr.copy()
n = len(arr)
# 外层循环:控制已排序边界,i 是当前要放最小值的位置
for i in range(n - 1):
# 假设当前 i 位置是最小值的下标
min_index = i
# 内层循环:在 i 之后找真正的最小值下标
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j
# 找到最小值后,交换到 i 位置
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
if __name__ == '__main__':
nums = [5, 2, 9, 1, 5, 6]
print("原始数组:", nums)
print("选择排序后:", selection_sort(nums))运行结果:
原始数组: [5, 2, 9, 1, 5, 6]
选择排序后: [1, 2, 5, 5, 6, 9]