Data
Stay hungry,Stay foolish!

导航

 

选择排序

思想是在一个列表中每次循环一遍,拿到最小值,接着再从剩下的无序区中继续拿最小值,如此循环,直到结束。

时间复杂度为O(n^2)

# 最简单的一个选择排序,循环一个列表,拿到最小值,添加到一个新列表,之后在列表中删除这个最小值,继续再剩下的值中找最小值,往复循环。
def select_sort_simple(li):
    new_li = []
    for i in range(len(li)):
        min_val = min(li)
        new_li.append(min_val)
        li.remove(min_val)
    return new_li

这个算法有明显的缺点,因为是生成了两个列表,占用空间

正宗的选择排序

def select_sort(li):
    for i in range(len(li)-1):  # 需要选择n-1趟,最后一次不需要再找了
        min_loc = i  # 我们把每次得到的最小值放到第一位,刚开始假定最小值的索引就是i
        # 剩下的无序区则为 i,len(i),顾头不顾尾
        for j in range(i+1, len(li)):
            #  接下来遍历无序区找比假定的min_loc的值还小的
            if li[j] < li[min_loc]:
                min_loc = j
        # 如果最小值不是假定的i,一旦找到,交换最小值位置
        if min_loc != i:
            li[min_loc], li[i] = li[i], li[min_loc]
        print(li)
li = [3, 2, 1, 4, 8, 7, 6, 5]

select_sort(li)

gai

看这个的查找步骤,先把第一次的3作为了最小值,然后去循环剩下的[2,1,4,8,7,6,5],一旦找到了1
就把1和3的位置进行了调换,得到了[1,2,3,4,8,7,6,5]
此时最小值为2,过,最小值为3,过,最小值为4,过
直到最小值为8,5和8调换,最小值7,6和7掉换,最后一位不走,程序结束
posted on 2018-11-05 23:15  进击中的青年  阅读(134)  评论(0编辑  收藏  举报