zoukankan      html  css  js  c++  java
  • InsertSort 插入排序

    # InsertSort 插入排序_Python实现
    
    
    def insert_sort(li):
        for i in range(1, len(li)):  # 此处选择从第二个开始且len不减一,因为计算框从i-1开始, 整体需要往后推一格
            temp = li[i]  # 当前所对比的值
            j = i - 1  # 需要对比的开始坐标
            while j >= 0 and temp < li[j]:
                li[j+1] = li[j]
                j -= 1
            li[j+1] = temp # 计算完毕或无计算, 把值放在对比值的后面. 因为在循环中i的值没有发生变化,不考虑可读性时,temp变量可以省去
        return li
    
    
    list = [1, 55, 98984, 65, 165, 356, 54, 3, 645, 74, 64, 35]
    
    li = insert_sort(list)
    print(li)
    

      

    插入排序:

    一次遍历, 一次循环.

    遍历第一个值a, 下标i, 并定义变量保存a值
    用a对比前一个位置的值, (需限制下标范围, 第一次条件必定不成立)
    如果a小于对方, 开始循环
    把它的值赋予原本a所在的下标(这也是为什么需要变量保存a).
    所对比的下标加一.
    然后继续循环. 直到a不必前面的值小. 这个时候再将a赋值给当前下标.

    理解插入算法, 应该从j变量着手. 以每次所需要对比的值为中心,
    当对比成功则中心前移. 对比失败(或无对比), 则把手上揣的值放在中心后面.

     

    插入排序和 选择排序:


    两种排序方式都是定义了一个变量, 将当前需要比对的值与其他位数进行比对.
    插入排序只用了一次遍历, 然后又用了一次循环.
    不同的是, 插入排序循环时, 不一定循环整个列表.
    相对来说, 这里循环更有优势.

    插入排序的循环次数是逐渐增加, 这和选择冒泡相反.

    和选择冒泡排序相对比, 插入排序上在写法上有所限制.
    例如:
    在使用选择或者冒泡的时候, 因为内层计算也是全遍历. 所以,
    (同样性能的前提/某列表从小到大的排序)
    我可以左边开始, 比较最大的值放在最右边.也可以从右边开始比较最小的值放在最左边.(当然,这样太任性,为了可读性,请不要这样做)

  • 相关阅读:
    物理材质
    铰链joints
    unity 刚体
    扩展方法
    转换操作符方法(非基元类型转换)
    向方法传递可变数量的参数
    参数:可选参数和命名参数
    实例构造器与值类型和引用类型、类型构造器
    成员的可访问性,友元程序集,静态类
    如何删除github上项目的文件
  • 原文地址:https://www.cnblogs.com/jrri/p/12099922.html
Copyright © 2011-2022 走看看