码迷,mamicode.com
首页 > 编程语言 > 详细

python算法-插入排序

时间:2018-01-27 22:14:46      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:class   lib   复杂度   复杂   交换   时间复杂度   大于   思想   好的   

插入排序

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

例子:数组有有一个数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)

python算法-插入排序

标签:class   lib   复杂度   复杂   交换   时间复杂度   大于   思想   好的   

原文地址:https://www.cnblogs.com/qingqing-919/p/8367307.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!