插入排序

直接插入排序

算法描述

直接插入排序是一种原址排序法,核心思想是:对一个元素数目为n的待排序序列list,从序列第二个元素开始,将每一个待排序元素list[i] 与从后向前与其前面的元素依次比较,直到遇到第一个比list[i] 小的元素,则将其插入该元素后面(从小到大排);算法中待插入元素之前的序列已经是有序的,即list[0:i-1]是已经排好序的。

算法实现(python)

def insertArray(arr):
    for j in range(1,len(arr)):
        if arr[j]<=arr[j-1]:
            key=arr[j]
            i=j-1
            while (i>=0) & (arr[i]>key):
                arr[i+1]=arr[i]
                i=i-1
            arr[i+1]=key
        print "第",j,"次排序结果",arr
    print "最终排序结果",arr

if __name__=="__main__":
    arr=[1,4,2,6,5]
    insertArray(arr)

时间复杂度

最好情况:序列list已经排好序了,此时每个待插入元素只需比 较一次,此时算法时间复杂度为O(n)
最坏情况:序列list是倒序的,此时算法需要比较的次数为n(n-1)/2,即时间复杂度为O(n^2)
平均情况:为O(n^2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值