排序算法---插入排序

插入排序的原理:每次插入一个数将它和之前已经完成排序的序列进行重新排序,也就是找到需要插入的位置。

稳定性:稳定

时间复杂度:o(n^{2})

过程:(假设为正序排序)

假设前j-1个元素已经排好序, 将第j个元素分别于其前面元素[i]比较,如i元素较大,则将i元素的值往前移动一位,即 a[i+1] = a[i]
若i元素较小,则直接将j位置的值放到 i+1元素的位置。

输入:[1,5,3,4,5,6,8]----待排序数组

第一次排序:

1      5    3    4    5   6   8

i=0  j=1

此时将j=1对应的5和前面的每一个数对比,此处是1,发现5>1,所以将5放在i+1的位置,此时i=0,前两个数已经排好序。

第二次排序:

1   5   3    4    5      6     8

    i=1 j=2

将j=2对应的3作为key和前面的每个数比较,这里先比较3和5,发现5>3,此时将5往后移一位(a[i+1]=a[i]),然后i-1,则比较3和1,发现3>1,所以将3放在5所在的位置,也就是a[i+1]=key。

第三次排序:

1   3   5   4   5     6    8

         i=2 j=3

将j=3所对应的4作为key和前面的每个数比较,首先比较4和5,5>4,所以5向后移动一位(a[i+1]=a[i]),然后i-1,比较4和3,由于4>3,所以将4放到5所在的位置。

第四次排序:

1    3     4     5     5      6      8

                   i=3   j=4

将j=4所对应的5作为key和前面的每个数比较,首先比较5和5,发现5=5,所以直接退出循环

第五次排序:

1    3     4     5     5      6      8

                        i=4    j=5

将j=5所对应的6作为key和前面的每个数比较,首先比较5和6,发现6>5,所以直接退出循环

第六次排序:

1    3     4     5     5      6      8

                                  i=5    j=6

将j=6所对应的8作为key和前面的每个数比较,首先比较6和8,发现8>6,所以直接退出循环,完成排序。

上面是一个完整的插入排序的过程。

python代码

    def insertion_sort(self,nums:list):
        length = len(nums)
        for j in range(1,length):
            key = nums[j]
            i = j - 1
            while i >= 0 and nums[i] > key:
                nums[i + 1] = nums[i]
                i = i - 1
            nums[i + 1] = key
        return nums

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值