选择排序Python怎么写?
选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。以下是使用 Python 实现选择排序的详细介绍:
代码实现
def selection_sort(arr):
# 获取数组的长度
n = len(arr)
# 遍历数组中的每一个元素
for i in range(n):
# 假设当前位置的元素是最小的
min_idx = i
# 从当前元素的下一个位置开始遍历,找到最小元素的索引
for j in range(i + 1, n):
if arr[j] < arr[min_idx]:
min_idx = j
# 将找到的最小元素与当前位置的元素交换
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# 测试代码
arr = [64, 25, 12, 22, 11]
sorted_arr = selection_sort(arr)
print("排序后的数组:", sorted_arr)
代码解释
- 外层循环:
for i in range(n),这个循环控制当前正在处理的元素位置,它会遍历数组中的每一个元素。 - 假设最小元素:在每次外层循环开始时,假设当前位置
i的元素是最小的,将其索引i赋值给min_idx。 - 内层循环:
for j in range(i + 1, n),从当前元素的下一个位置开始遍历数组,找到最小元素的索引。如果发现比当前假设的最小元素更小的元素,就更新min_idx为该元素的索引。 - 交换元素:内层循环结束后,将找到的最小元素与当前位置
i的元素进行交换。通过arr[i], arr[min_idx] = arr[min_idx], arr[i]实现元素交换。 - 返回结果:当外层循环结束时,数组就完成了排序,最后返回排序好的数组。
复杂度分析
- 时间复杂度:选择排序的时间复杂度是 O(n^2),因为有两层嵌套的循环,对于长度为n 的数组,需要进行大约n(n-1)/2 次比较。
- 空间复杂度:选择排序只需要常数级的额外空间,空间复杂度为 O(1),因为只需要几个额外的变量来存储索引和临时元素。
稳定性分析
选择排序是一种不稳定的排序算法。所谓不稳定,是指在排序过程中,相等元素的相对顺序可能会发生改变。例如,对于数组 [5, 8, 5, 2],第一次选择最小元素 2 与第一个 5 交换后,两个 5 的相对顺序就发生了变化。
浙公网安备 33010602011771号