一、概念。
选择排序是一种简单直观的排序算法。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,他们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
二、逻辑。
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放导已排序序列的末尾。以此类推,直到所有元素均排序完毕。
三、代码。
def selection_select(alist):
"""选择排序"""
# i表示执行轮数
for i in range(len(alist) - 1):
# 记录最小位置
min_index = i
# 从i+1位置到末尾选出最小数据
for j in range(i + 1, len(alist)):
if alist[j] < alist[min_index]:
min_index = j
# 如果选择出的数据不在正确位置,进行交换
if min_index != alist[i]:
alist[i], alist[min_index] = alist[min_index], alist[i]
alist = [23, 12, 5, 17, 2, 1, 22]
selection_select(alist)
print(alist)
四、时间复杂度。
最优时间复杂度:O(n**2)
最坏时间复杂度:O(n**2)
稳定行:不稳定(考虑升序每次选择最大的情况)

被折叠的 条评论
为什么被折叠?



