- 选择排序的思想:每次从a[i]到最后中找到最小元素对应的位置,然后将该位置的元素与i位置进行交换,将未排序部分的最小元换到前面有序部分的最后位置。选择排序算法的时间复杂度也是O(n2)O(n^2)O(n2),选择排序算法存在的问题:虽然执行交换操作的次数为O(n),但在寻找最小元,需要遍历从i到n-1位置的元素找到最小元,这使得最终时间复杂度为O(n2)O(n^2)O(n2)。
- 选择排序是不稳定的,因为每次选择最小的与前面的进行交换,这种思想会使得具有相对位置的相同元素的位置改变,例如对于[8, 5, 8*, 7, 9],第一次5与8进行交换[5, 8, 8*, 7, 9],第二次7与8进行交换,此时[5, 7, 8*, 8, 9]。因此选择排序是不稳定的。
代码实现:
def selection_sort(a, n):
for i in range(n):
minind = i
for j in range(i+1, n):
if a[j] < a[minind]:
minind = j
a[i], a[minind] = a[minind], a[i]
a = [2, 5, 6, 3, 2, 1]
selection_sort(a, len(a))
print(a)