zoukankan      html  css  js  c++  java
  • 算法之LOWB三人组之选择排序

    选择排序

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

    时间复杂度为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掉换,最后一位不走,程序结束
  • 相关阅读:
    广通软件招聘-北京广通信达软件股份有限公司杭州分公司招聘-拉勾网
    广通软件
    Django – vicalloy's trac
    MyCAT常用分片规则之分片枚举
    django-extensions 文档 — django-extensions 1.2.5 文档
    Samba服务搭建 | Charlie's Blog
    Centos搭建Samba
    sqlite常用的命令-增删改查
    Win7 NFS 设置详解 | X-Space
    LabF nfs window client
  • 原文地址:https://www.cnblogs.com/lishi-jie/p/9912281.html
Copyright © 2011-2022 走看看