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

    插入排序( Insert sort)

    通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入;

    由于不需要全部都比较完,所以排序速度优于冒泡和选择排序。

    #插入排序就像是斗地主摸牌

    1.算法描述:

    1. 从第一个元素开始,该元素可以认为已经被排序;
    2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
    3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
    5. 将新元素插入到该位置后;
    6. 重复步骤2~5。

    2.算法属性:

    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
    • 稳定性:稳定

    3.代码实现

    #kumata's code
    #算法时间复杂度O(n^2)
    #从小到大排
    
    import time
    
    def insert_sort(nums):
        start = time.time()
        
        #一张张摸牌,拿到手中
        for sort_inx in range(1,len(nums)):   #从1开始
            unsort_inx = sort_inx
            #当需要排序的index大于0且未排index前一个大于后一个时:
            while unsort_inx > 0 and nums[unsort_inx - 1] > nums[unsort_inx]:
                #前后交换
                nums[unsort_inx - 1], nums[unsort_inx] =  nums[unsort_inx], nums[unsort_inx - 1]  
                unsort_inx = unsort_inx - 1  #unsort下标更新
                
        t = time.time() - start
        return nums,t
    
    lis = [1,2,5,8,4,3,6]
    insert_sort(lis)

    输出结果:
    ([1, 2, 3, 4, 5, 6, 8], 0.0)
  • 相关阅读:
    idea如何使用git关联远程仓库
    项目首次上传至git仓库步骤
    Eclipse 的 Java Web 项目环境搭建
    Postman
    Postman接口测试之POST、GET请求方法
    接口测试3A原则
    使用unittest和ddt进行数据驱动
    每天进步一点点006
    每天进步一点点005
    Selenium2+python自动化1-环境搭建(悠悠课程之路)
  • 原文地址:https://www.cnblogs.com/kumata/p/9119606.html
Copyright © 2011-2022 走看看