原理:每次都选择最小的元素与其交换位置
第一版:
def select_sort(_list):
for i in range(1, len(_list)):
min_num_index = _list[1:].index(min(_list[i:])) + 1
if _list[i - 1] > _list[min_num_index]:
_list[i - 1], _list[min_num_index] = _list[min_num_index], _list[i - 1]
return _list
可以使用了过多的原生方法,并且原生方法底层也多是循环,时间复杂度远超O(n**2)
标准版:
def select_sort(lst):
for i in range(0, len(lst)):
min_index = i
for j in range(i + 1, len(lst)):
if lst[min_index] > lst[j]:
min_index = j
lst[min_index], lst[i] = lst[i], lst[min_index]
return lst
进阶版:
# 最大`最小值 一起的选择排序
def select_sort(lst):
n = len(lst)-1
i = 0
while i < n:
min_index = i
max_index = n
for j in range(i, n+1):
if lst[min_index] >= lst[j]:
min_index = j
if lst[max_index] < lst[j]:
max_index = j
# 当min和max的位置是要互换的话,就只换一次
if max_index - i == min_index - n:
lst[min_index], lst[i] = lst[i], lst[min_index]
else:
lst[min_index], lst[i] = lst[i], lst[min_index]
lst[max_index], lst[n] = lst[n], lst[max_index]
i += 1
n -= 1
return lst