zoukankan      html  css  js  c++  java
  • 八大排序算法的python实现(一)直接插入排序

    刚参考网上的以及书上的资料把这八大算法又复习了一遍,感悟就是:有些算法原理真的很简单,一看就懂,但实现起来总是有这样那样的问题。

    闲言少叙,先贴代码,之后再以自己的理解,以及自己在理解与实现的过程中遇到的坑,以自己的话记录下来。为了以后复习的方便,也可能给遇到同样坑的人提供些许的思路!

    #coding:utf-8
    #author:徐卜灵
    #1.直接插入排序
    L = [1, 3, 2, 32, 15, 5, 4]
    def Insert_sort(L):
        for i in range(1,len(L)):
            for j in range(0,i):#这里面其实也是从前向后比较
                if L[i]<L[j]:
                    L.insert(j,L[i])#在不大于的位置插入L[i],这个时候,列表加长了1位,L[i]插入到指定位置了,但它的值也向后移动了一位
                    L.pop(i+1)#把原来L[i]的值删除。
        print L
        #空间复杂度为O(1),时间复杂度为O(n*n)
    Insert_sort(L)
    # print sorted(L)#自带的两种排序
    # L.sort()
    # print L

    思路:直接插入排序是比较简单的算法了。需要注意的是,L.insert(j,L[i])这样在适当的位置插入了L[i],同时j后面的元素都往后移动了一位,原来的L[i] 变成了L[i+1],仍然在列表里,所以有一步删除的操作。

    这里L.insert(j,L[i]) 和L.pop(i+1)是理解整个算法的关键。

    所以算法的空间复杂度为O(1)

    时间复杂度,从程序中可以看出循环里嵌套了一层循环,所以为O(n ** 2).

    此算法为稳定排序算法。

  • 相关阅读:
    $.extend用法详解(一)
    JQuery中$.each 和$(selector).each()的区别详解
    span元素和div元素的浮动效果
    $.ajax中contentType: “application/json” 的用法
    JS中获取URL的参数的方法
    移动端的touch事件(一)
    JS运算的优先级
    关于更新发布CSS和JS文件的缓存问题
    small标签
    DP:三角形的最小路径和
  • 原文地址:https://www.cnblogs.com/xubing-613/p/7286146.html
Copyright © 2011-2022 走看看