sunny-cheng  
用之前学过的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)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,
存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。

时间复杂度

  杂度为 
可以看出这个实现方法与冒泡排序很相似的,但是细看还是有区别的
  -冒泡排序每一次排序都是会交换 ,选择排序就只有冒泡的一半交换次数
  -冒泡排序是稳定的方法,选择排序不是稳定方法
 


posted on 2019-04-24 12:40  sunny-cheng  阅读(265)  评论(0编辑  收藏  举报