选择排序
原理如下:
- 首先假定数组中最大元素的下标为 0 , 即数组中的第一个元素。
- 通过 for 循环,将第一个元素与剩余元素逐一比较,比较过程中,如:第一个元素大于第二个元素,则更改最大元素的下标为 1,依次类推得到数组中真实的最大元素,将此最大元素放置在数组的最后位置,注意数组中的最大元素的位置已确定,不再更换。
- 重复上述操作(除去数组中最大元素不参与比较)可以依次确定数组中的第二大、第三大等元素的位置。
- 直至整个数组都已顺序排列为止。
算法稳定性
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个 元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
Python实现
def choose_sort(lst):
length = len(lst)
for j in range(length):
max_index = 0
for i in range(1, length - j):
if lst[max_index] < lst[i]:
max_index = i
lst[max_index], lst[length - 1 - j] = lst[length - 1 - j], lst[max_index]
return lst
if __name__ == '__main__':
lst = [3, 4, 5, 7, 1, 2, 6, 9, 0]
print(choose_sort(lst))
# [0, 1, 2, 3, 4, 5, 6, 7, 9]