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

    插入排序

    一、核心思想:在一个有序的数组中,通过逐一和前面的数进行比较,找到新数的位置。

    例子:数组有有一个数21

    插入一个33<21,因此结果为 3,21

    再插入一个34,34>21,因此结果为 3,21,34

    再插入一个6,34>6,向前移动,21>6,再向前移动,3<6,因此结果为 3,6,21,34

    问题1:对于一个有n个数的数组,需要插入多少次,才能完成插入排序?

    N-1

    二、核心代码:

    def Insert_Sort(lista):

        for i in xrange(1,len(lista)): #i控制从第二个数字开始到最后一个数字的下标

            j = i -1  #j去控制i前面一个数和i做比较

            while j >= 0: #j<0是一种退出循环的判定条件

                if lista[j] > lista[j+1]: #如果前数大于后数,就交换位置

                    lista[j],lista[j+1] = lista[j+1],lista[j]

                    j -= 1  #j依次减一,去跟前面的值作比较

                else:

                    break  #只要出现一个j>j+1,交换后就跳出本次循环即可

        return lista

    if __name__ == '__main__':

    print Insert_Sort([2,15,6,29,0])

    三、时间复杂度:

    最差的比较情况  1+2+...... +n-2 + n-1 = n(n-1)/2  n^2/2

    最好的比较情况  n-1 ............ 恰好都在对应的位置

    平均的情况就是 [n(n-1)/2 + (n-1)]/2  =  n^2/4   

    最后的结果就是O(n^2)

  • 相关阅读:
    老板说,你给我1分钟内下载100张图片!So,easy!
    测试用例 setup 和 和 teardown
    pytest环境准备与入门
    测试工程需要明白的Monkey测试
    5.通过定位实现二级菜单
    4.CSS中float导致的高度坍塌问题及解决方法
    3.使用float实现文字环绕图片
    2.reset.css文件
    1.图片元素<img>和<map>的联用
    1.引用js文件中的函数调用
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8367307.html
Copyright © 2011-2022 走看看