zoukankan      html  css  js  c++  java
  • 算法--插入排序

    插入排序

    列表被分为有序区和无序区两个部分。最初有序区只有一个元素。

    每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。

    【就好比打牌,摸牌,手里的牌是有序的,桌子上的牌是无序的,从桌子上最上面摸一张牌,插入到手里的牌里面】


    代码关键点:

    • 摸到的牌
    • 手里的牌

    图一: 红色有序区, 白色无序区

    图二: 从无序区拿出一个值

    图三:

    图四: 插入到有序区

    python代码实现:

    li = [1, 2, 3, 7, 5, 9, 4, 8, 1]
    
    
    def insert_sort(li):
        for i in range(1, len(li)):  # 第一个位置的值初识化为有序区,索引从1开始
            temp = li[i]  # 把无序区第一个位置的值拿出来(新摸到的一张牌)
            j = i - 1  # 有序区最后一个位置的索引
            while j >= 0 and temp < li[j]:  # 两个终止条件: 1.j<0,索引越界,说明temp是最小的
                li[j + 1] = li[j]  # 把有序区最后一个位置的值往后移一格
                j -= 1
            li[j + 1] = temp
            # 两个终止条件: 1. j=-1,说明temp最小,放到最前面
            #              2. 一上来,无序区第一个值就大于有序区最后一个值
    
    
    insert_sort(li)
    print(li)

    时间复杂度:O(n2)

    空间复杂度:O(1)

    优化空间:应用二分查找来寻找插入点(并没有什么卵用)

      注意while j >= 0 and temp < li[j]: 两个条件的顺序


    布尔运算的短路功能

    1 > 2 and 3 < 4 

    python做了优化, 前面不满足,后面就不判断了

    不用if写一个if语句

    def func():
        print(11)
    
    a = 1
    
    a < 0 and func()
    
    a > 0 and func()
    # 11
  • 相关阅读:
    奥东......NGUI Scroll View
    奥东......Unity中小技巧
    java-web 小知识点
    奥东here......Unity中的协程
    JAVA 犯错汇总
    python 模拟 java hashcode
    pyqt文件转换成python代码
    loadrunner 运行javavuser报错Failed to get JRE version解决方法
    python 实现 loadrunner xml脚本格式化
    loadrunner web_custom_request 脚本处理
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/12891369.html
Copyright © 2011-2022 走看看