Python_072502经典算法--选择排序--个人理解

135 阅读2分钟

@TOC

选择排序(SelectSort)

选择排序(SelectSort)是一种简单直观的排序算法。

算法原理

首先从待排序列表中找到最小(大)的元素,存放到元素列表的起始位置(与起始位置进行交换),作为已排序序列,第一轮排序完成。然后,继续从未排序序列中找到最小(大)的元素,存放到已排序序列的末尾。直到所有元素都存放到了已排序序列中,列表排序完成。

时间复杂度

在选择排序中,不管待排序列表的初始状态如何,都不影响排序的时间复杂度。选择排序需要进行 n-1 轮排序,每一轮排序需要进行 n-i 次比较,i 的平均值是 n/2 ,时间复杂度为 T(n)=n(n-1)/2 ,再乘每次操作的步骤数(常数,不影响大O记法),所以选择排序的时间复杂度为 O(n^2) 。

稳定性

在选择排序中,每次都是选择未排序序列中的最小元素,交换到未排序序列的起始位置。存在相等的元素时,如果最小的元素都比它们靠后,最小的元素与相对位置靠前的元素进行交换,则它们的相对位置就发生了变化。如 [10, 10, 5],进行选择排序后两个 10 的相对位置发生了变化。所以选择排序是一种不稳定的排序算法。

(不懂没关系,先有个概念,待会看例子就OK了)

举个栗子

排序规律万万种,我就用简单的数字大小来说明吧~(当然主要应用是其他复杂类型的比较)

以列表 [10, 17, 50, 7, 30] 进行升序排列为例。最后按照从小到大排列(其他类型的数据就是别的规律排列),则排列后就是 [7, 10, 17, 30, 50]


def selec_sort(array):
    for i in range(len(array)-1):
        min_index = i
        for j in range(i+1, len(array)):
            if array[j] < array[min_index]:
                min_index = j
        if min_index != i:
            array[i], array[min_index] = array[min_index], array[i]
    return array
 
 
if __name__ == '__main__':
    array = [10, 17, 50, 7, 30]
    print(selection_sort(array))