一、选择排序的工作原理
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
二、逻辑实现
[7,5,3,6,44,22,99,11] [3,5,7,6,44,22,99,11] #第一次 获取列表最小的元素与列表第一个元素交换位置 [3,5,7,6,44,22,99,11] #第二次 列表第一个元素不动,获取剩下列表(除列表第一个元素外)的元素的最小值与列表第二个元素交换位置 [3,5,6,7,44,22,99,11] #第三次 列表第一,二个元素不动,获取剩下列表(除列表第一,二个元素外)的元素的最小值与列表第三个元素交换位置 #... [3,5,6,7,11,22,99,44] #倒数第二次 [3,5,6,7,11,22,44,99] #直到最后一次,获取剩余列表(最后两个元素99,44)元素的最小值与列表倒数第二个元素交换位置。
三、代码实现
def select_sort(alist):
n=len(alist)
for i in range(n-1): #O(n)
#剩余列表中最小值的索引
min_index=i
for j in range(i+1,n): #O(n)
if alist[min_index]>alist[j]:
min_index=j
if min_index!=i:
alist[i],alist[min_index]=alist[min_index],alist[i]
alist=[7,5,3,6,44,22,99,11]
print("原数组")
print(alist)
select_sort(alist)
print("排序后的数组:")
print(alist)
结果展示:
原数组
[7, 5, 3, 6, 44, 22, 99, 11]
排序后的数组:
[3, 5, 6, 7, 11, 22, 44, 99]
四、选择排序的时间复杂度及其稳定性
1.最优时间复杂度:O(n^2) 2.最坏时间复杂度:O(n^2) 3.稳定性:不稳定(考虑升序每次选择最大的情况)