直接选择排序的基本思想是在未排序的序列中选择一个最小的数,将其放在已经排好序的部分的最后。每次需要在剩余的元素中选择一个最小的数,而每次选择最小的数时都需要把剩下的所有的数都比较一遍。所以直接选择排序的最优时间复杂度、最坏时间复杂度、平均时间复杂度均为O(n²)。
若待排序的序列中元素的总数为m个,则需要选择m-1次。若n表示已经选择过的次数,则第n+1次选择需要比较m-n-1次。
'''
直接选择排序
'''
def selectSort(nums):
# 遍历列表,将第i个看成最小的数
for i in range(0, len(nums)):
# 记录未排序中最小的数的下标,初始值是当前遍历的下标
min_index = i
# 循环向后找
for j in range(i + 1, len(nums)):
# 如果找到一个比已经记录的最小数下标的数还小的数
if nums[j] < nums[min_index]:
# 修改最小数的下标
min_index = j
# 若最小数下标不是当前遍历的下标,说明后面有更小的数
if min_index != i:
# 交换位置
temp = nums[min_index]
nums[min_index] = nums[i]
nums[i] = temp
# 待排序序列
list = [3, 5, 1, 8, 6, 9, 7, 0, 2]
# 选择排序
selectSort(list)
# 输出排序后的结果
print(list)



