@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))