插入排序法 python

列表被分为两部分,还是前半部分是排好序的,后半部分是还没有排序的。
与选择排序法不同的是,插入排序每次选排好序的后面那个元素,依次从后向前与排好序的元素们进行比较大小。
选择排序是从后面部分中找出最小的放到前面去。
插入排序是将后面第一个元素在排好序的列表里面找合适的地方插入进去。
所以需要一个循环控制每次获得乱序部分的第一个元素。
一开始我们认为第一个元素本身就是一个排好序的部分,所以第一步是从第二个元素开始,即alist[1],将alist[1]与alist【0】比较大小,寻找合适的插入位置;第二步是第三个元素alist[2],与前面alist[0]-alist[1]比较大小寻找合适插入位置,……一直到最后一个元素alist[n-1],寻找前面alist[0]-alist[n-2]中合适的插入位置。所以for i in range(1,n)
寻找合适插入位置的操作:每次讲alist[x]依次从后向前与每个元素进行比较,如果alist【x】比较小的话,就交换两者位置,继续向前比较,直到找到比alist[x]小的元素就不交换了,这事就是顺序的了。

def insert_sort(alist):#插入排序
    n = len(alist)
    for i in range(1,n):#要插入的对象
        index = i
        while(index>0):
            if alist[index]<alist[index-1]:
                alist[index],alist[index-1] = alist[index-1],alist[index]
                index -= 1
            else:
                break
    return alist

index是为了记录我们往前寻找合适位置的那个元素的下标,这样才方便交换元素。

时间复杂度:
最优时间复杂度:O(N) (升序排列,序列已经处于升序状态)
最坏时间复杂度:O(N**2)
稳定性:稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值