解析插入排序算法

插入排序算法解析

    基本思想:将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)
    假设给定一个数组arr = {4,8,6,2,7,3,5,1,9}
    a.首先比较数组中第一个数(arr[0] = 4)和第二个数(arr[1] = 8),若第一个数大于第二个数,则两个数交换位置,在这里显然不成立,所以不用交换位置。
    b.然后再比较第二个数(arr[1] = 8)和第三个数(arr[2] = 6),同样按照上述规则进行,发现8>6,进行两个数的交换,至此“6”的使命并不算完结,它还需要和第一个数比较,并按照上面的“游戏规则”判断是否与第一个数执行交换。
    c.同理,第四个数和第三个数进行比较······················一直比较到第一个比他小的数!!!
    d.后面的不一一赘述,看图:
在这里插入图片描述
    -------关于插入排序的时间复杂度:
        1)当初始序列为正序时,只需要外循环arr.length-1次,每次进行一次比较,无需移元素。此时比较次数(为n-1)和移动次数(为0)达到最小值。
        此时时间复杂度为O(n)
        2)当初始序列为反序时,需要外循环n-1次,每次排序中待插入的元素都要和[0,i-1]中的i个元素进行比较且要将这i个元素后移i次,加上 temp=arr[i]与arr[j]=temp的两次移动,每趟移动次数为i+2,此时比较次数和移动次数达到最大值。
        比较次数为1+2+3+4+·····+(n-1) = n(n-1)/2
        移动次数为(1+2)+(2+2)+(3+2)+······+(n-1+2) = (n-1)(n+4)/2
        所以此时时间复杂度为O(n^2)
    -------关于插入排序的空间复杂度:
        首先相同元素的相对位置不会变,若比较过程中两个元素相同,则插入元素放在相同元素之后,所以插入排序是一种稳定排序。
        其次,看图,插入排序明显与问题规模无关,也并没有用到递归思想,所以其空间复杂度为O(1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值