排序算法之 '选择排序'

选择排序

原理如下:

  1. 首先假定数组中最大元素的下标为 0 , 即数组中的第一个元素
  2. 通过 for 循环,将第一个元素剩余元素逐一比较,比较过程中,如:第一个元素大于第二个元素,则更改最大元素的下标为 1,依次类推得到数组中真实的最大元素,将此最大元素放置在数组的最后位置,注意数组中的最大元素的位置已确定,不再更换
  3. 重复上述操作(除去数组中最大元素不参与比较)可以依次确定数组中的第二大、第三大等元素的位置。
  4. 直至整个数组都已顺序排列为止。

算法稳定性

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第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]
posted @ 2020-07-17 12:49  嗨,阿良  阅读(148)  评论(0编辑  收藏  举报