选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

原理

选择排序的主要操作是交换和比较。在每一步中,算法在未排序的序列中找到最小(或最大)的元素,将其与序列的第一个元素交换。然后,算法会忽略第一个元素(因为它现在已经在正确的位置上了),并继续在未排序的元素中寻找最小(或最大)的元素,并将其与未排序序列的第一个元素交换。这个过程会重复,直到整个序列都有序。

实现

以下是选择排序的Python实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def selection_sort(arr):
# 遍历所有数组元素
for i in range(len(arr)):
# 找到未排序部分的最小值
min_idx = i
for j in range(i+1, len(arr)):
if arr[j] < arr[min_idx]:
min_idx = j

# 将找到的最小值与第i个位置的值交换
arr[i], arr[min_idx] = arr[min_idx], arr[i]

# 测试代码
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的数组:")
for i in range(len(arr)):
print("%d" % arr[i]),

在这个实现中,外部循环遍历整个数组,内部循环在未排序的部分中找到最小的元素。然后,外部循环将找到的最小元素与当前位置的元素交换。这样,每次外部循环结束后,最小元素就会被移到正确的位置。

注意

  1. 选择排序的时间复杂度是O(n^2),其中n是待排序元素的数量。虽然它在大数据量的情况下可能不是最优的选择,但它在小数据量的情况下表现良好,并且它的实现相对简单。
  2. 选择排序是一种不稳定的排序方法,也就是说,如果序列中存在两个相等的元素,选择排序可能会改变它们的相对位置。