用之前学过的Python自带方法排序
def select_sort_simple(li):
li_new = []
for i in range(len(li)):
min_val = min(li)
li_new.append(min_val)
li.remove(min_val)
return li_new
这个方法结果是没有问题的,但是不建议使用 :
1.空间上使用两个列表 会多一倍内存消耗
2.remove 会找到列表在删掉再往前补 所以时间复杂度是O(n*n)
所以时间和空间复杂度来说都不是很好的实现方式
选择排序
def select_sort(li):
for i in range(len(li)):
min_loc = i
for j in range(i+1,len(li)):
if li[j] < li[min_loc] : #成立保证每一次交换的都是最小值
min_loc = j #记录当前最小数值的索引
print('min_loc',min_loc)
li[i], li[min_loc] =li[min_loc],li[i] #min_loc = i 所以有交换但是数值没有变,所以不稳定
print(li)
li = [3,1,5,4,8]
select_sort(li)
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,
存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。
时间复杂度
杂度为
可以看出这个实现方法与冒泡排序很相似的,但是细看还是有区别的
-冒泡排序每一次排序都是会交换 ,选择排序就只有冒泡的一半交换次数
-冒泡排序是稳定的方法,选择排序不是稳定方法