zoukankan      html  css  js  c++  java
  • 舞动算法:插入排序

    插入排序原理

    • 从第二个元素开始和前面的元素进行比较,如果前面的元素比当前元素大,则将前面元素 后移,当前元素依次往前,直到找到比它小或等于它的元素插入在其后面。

    • 然后选择第三个元素,重复上述操作,直到最后一个元素。

    插入排序特点

    时间复杂度:插入排序同样需要两次循坏一个一个比较,故时间复杂度也为O(n^2)

    空间复杂度:只需要常数个辅助单元,所以空间复杂度也为O(1)

    不明白?跳个舞吧【https://www.bilibili.com/video/BV1xW411Y73Z?t=95

    def insertion_sort(arr):
        # 获取列表长度
        length = len(arr)
    
        # 从第二个元素开始,即下标为 1 的元素,进行比较
        for i in range(1, length):
            # 将当前值作为一个临时变量存储,用于值的比较交换
            temp = arr[i]
            # 获得当前值的前一个元素的下标
            pre_index = i - 1
    
            # 判断前一个元素是否存在,并将它和当前值进行大小比较
            while pre_index >= 0 and arr[pre_index] > temp:
                # 前一个元素值 大于 当前值时
                # 将该前一个元素值,向后移一位,进行值的覆盖
                arr[pre_index + 1] = arr[pre_index]
    
                # 向前,再获取下一个元素的下标
                pre_index -= 1
            # 当前一个元素值 小于 temp这个比较值时,temp会插入在这个元素值后面
            arr[pre_index + 1] = temp
    
        return arr
    
    
    def insertion_sort2(arr):
        # 获取列表长度
        length = len(arr)
    
        for i in range(1, length):
            # 设置当前值前一个元素的标识
            j = i - 1
    
            # 如果当前值小于前一个元素,则将当前值作为一个临时变量存储,将前一个元素后移一位
            if arr[i] < arr[j]:
                temp = arr[i]
                arr[i] = arr[j]
    
                # 继续往前寻找,如果有比临时变量大的数字,则后移一位,直到找到比临时变量小的元素或者达到列表第一个元素
                j = j-1
                while j >= 0 and arr[j] > temp:
                    arr[j + 1] = arr[j]
                    j = j-1
    
                # 将临时变量赋值给合适位置
                arr[j + 1] = temp
    
        return arr
    
    
    list_1 = [5, 3, 4, 2, 1]
    print(insertion_sort2(list_1))
  • 相关阅读:
    C语言printf语法
    Android动画
    【转】Android内存(内存溢出 内存不足 内存低 .)优化详解
    Android dialog在有的手机上宽度不能充满屏幕的问题
    ios单例模式(Singleton)
    给ImageButton设置按下的效果
    Dynamics CRM Entity Relationship Many to Many (N:N)
    Python实现Mysql数据库连接池
    python获取指定时间差的时间
    Visual studio debug—Process with an Id of 5616 is not running的解决方法
  • 原文地址:https://www.cnblogs.com/dc2019/p/13621623.html
Copyright © 2011-2022 走看看