直接插入排序比较次数_插入排序(C++)

本文深入探讨了插入排序的工作原理,将其与冒泡排序进行对比,指出其改进之处。插入排序在最好情况下时间复杂度为O(N),最坏情况下为O(N²),平均情况亦为O(N²)。尽管效率与冒泡排序相当,但其在已部分排序的数组中表现更优。此外,插入排序的空间复杂度为O(1),适合小规模数据排序。
摘要由CSDN通过智能技术生成

关于插入排序的例子网上有很多,这里只是为了加深理解,做个简单的记录,方便以后回顾。

一、代码图片(升序排序)

37f605ecfbc1362231ed0f98073a93c5.png

二、实现思路

1. 插入排序是将未排序的数据插入到已经排序的数据中。其实仔细发现其实插入排序是冒泡排序的改进版,冒泡排序是从头开始向后面比较,基本上每次都要从头比较到尾部,而插入排序从后向前比较,我们从第二个元素开始向前比较,当遇到一个大于他的数时,就将该数向后移动一位,然后继续向前比较知道遇到不大于他的数停止,然后从第三个元素开始重复上面的操作知道最后一个元素。这样明显的降低了比较的次数,是冒泡排序的进化版。效率任然为O(N^2) --->最坏的情况是完全倒序,此时比较次数就和冒泡排序一样。(插入排序的好处在于他无需从后向前比较到最前面的元素,只需要比较到第一个小于他的数就可以停止了,因为前面是有序的所以前面的数都肯定小于他)

2. 元素移动展示

3ce1ff55916d3fed3efc3f9f4faba76f.png

3. 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。应用场景适合规模不大于1000。

三、复杂度分析

时间复杂度

在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,时间复杂度为O(N)。

最坏的情况是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为O(N²)。

平均来说,A[1..j-1]中的一半元素小于A[j],一半元素大于A[j]。插入排序在平均情况运行时间与最坏情况运行时间一样,是输入规模的二次函数。

空间复杂度

插入排序的空间复杂度为常数阶 O(1)。

未完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值