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

    1、插入排序的核心算法

        将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数。

        即:序列的第一个元素,肯定是有序的,把第二个元素和第一个元素相比,插入到合适的位置,这样前两个元素就有序了,接着,把第三个元素插入到前面包含两个元素的有序列表中,以此类推,直至插完第n个数据。

    2、Python代码

    两种实现:

    def insertSort(listx):
        for i in xrange(1,len(listx)):
            for j in xrange(i-1,-1,-1):
                if listx[j+1]<listx[j]:
                    listx[j],listx[j+1]=listx[j+1],listx[j]
               else:
                    break
        return listx
     
    def insertSort(listx):
        xLen = len(listx)
        for i in xrange(1,xLen):
              j = i -1
              while j >= 0:
               if listx[j] > listx[j+1]:
                    listx[j+1],listx[j] = listx[j],listx[j+1]
                    j -= 1
               else:
                    break
        return listx
    3、时间复杂度:O(n^2)
    时间复杂度的计算:(平均情况=(最好情况+最差情况)/2)

    在计算时间复杂度时,我们一般使用的大O表示法,其时间复杂度,从小到大的排序是:

    O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<...<O(2^n)<O(n!)

    在最好的情况下,即序列已经是排好序的情况下,每次比较一次就退出while循环,则总比较次数是n-1次,时间复杂度是O(n)

    在最坏的情况下,即每次while循环都要比较到第一个元素,则:

    第一次循环,比较了1次;

    第二次循环,比较了2次;

    ...

    n-1次循环,比较了n-1次;

    总的比较次数是1+2+3+...+(n-1) = n(n-1)/2

    我们上面所求得的n(n-1)/2,其时间复杂度,最大的影响因子是n^2/2,故其时间复杂度是O(n^2)

     
     
  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/emily-qin/p/7058280.html
Copyright © 2011-2022 走看看