Python实现插入排序

插入排序简介

插入排序也是一种简单的排序算法。

简单来说,先定义一个有序队列,然后把无序队列中的第一个元素放到有序队列的合适位置,重复操作,直至形成一个完整的有序队列

生活实例:打扑克                                                                                         

插入排序原理

1、构建有序序列

2、选择无序队列的第一个元素,先放在有序队列末尾,然后进行冒泡排序,放到指定的位置

3、循环2步,直到无序队列中所有元素全部进入有序队列的合适位置

特点:

插入vs冒泡:

插入排序的有序队列用到了冒泡算法,

区别:

升序情况下:

冒泡:有序队列在后,无序队列在前,

插入:有序队列在前,无序队列在后

插入vs选择:

选择是遍历未排序队列,将最小的元素移动到有序队列的末尾

插入是把无序队列第一个元素放到有序队列,通过使用冒泡算法,移动到合适的位置

总结:

1、刚开始有序队列为空,直接把无序队列的第一个元素放到有序队列里即可

2、如果有序队列有内容,那么把无序队列的第一个元素放到有序队列里,然后有序队列进行冒泡排序

3、需要进行多少次冒泡排序呢?无序队列有几个元素,就进行n-1次有序队列的冒泡排序

 

通过分析,整个过程包括如下内容:

1、有序队列中元素比较替换 即"元素替换"

2、每次排序,有序队列中元素比较替换的次数 即"比较循环"

3、需要进行多少次排序 即"排序循环"

def insert_sort(alist):
    n = len(alist)
    for j in range(0, n):
        for i in range(j, 0, -1):
            if alist[i] < alist[i - 1]:
                alist[i], alist[i - 1] = alist[i - 1], alist[i]
            else:
                break
    return alist


if __name__ == '__main__':
    alist = [9, 8, 7, 6, 5, 4, 3, 2, 1]
    insert_sort(alist)
    print("排序后:", alist)

关键点:

1、元素替换:if alist[j] < alist[j-1]

2、比较循环:for j in range(i,0,-1)

3、插入循环:for i in range(n):

 

时间复杂度

最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)

如果有序队列里的元素正好是已排序的状态,不需要比较替换,那么内部的比较循环的时间复杂度就是O(1)

无序队列中有多少元素,就要进行多少次"比较循环",所以外部排序循环的时间复杂度是O(n)

所以整体来说:最优时间复杂度是O(n)

 

最坏时间复杂度:O(n2)

如果内部比较循环,需要全部排序,则它的最坏时间复杂度就是O(n)

所以整体来说:最坏时间复杂度是O(n2)

 

稳定性:稳定

通过示例可以得知,有序队列里面的元素顺序没有做任何变动,所以稳定

 

思考:

改那个地方,结果是降序?

if alist[j] < alist[j - 1]: 代码中的 < 改为 >

本节内容小结:

1、插入排序原理:无序第一进有序,有序内冒泡,数循环over。

2、插入排序实践步骤:无构有序-有序冒泡-外部插入循环-异常考虑

 

 

 

 

 

 

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值