textedit怎么插入数据_插入排序和冒泡排序对比

石头大V 2019-11-18 11:49:46

插入排序和冒泡排序都是经典排序算法,二者有什么区别呢?1、如何分析一个排序算法?
分析排序算法已经成为我们衡量一个算法优良的重要标准,从以下三个方面入手。
1.1、 时间效率
这里所谓的实践效率就是时间复杂度。复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。对于时间复杂度的分析,要把最好时间复杂度、最坏时间复杂度、平均时间复杂度分析出来,分别对应了排序算法的最好排序情况、最坏排序情况以及平均排序效率。
1.2、 空间消耗
所谓的空间消耗对应的是空间复杂度,在排序算法中需要开辟的额外内存空间是多少。如果空间复杂度为 O(1),此时该排序叫做原地排序。
注意:是额外的内存空间,存储排序数据消耗的空间不计。
1.3 、稳定性
算法的稳定性虽然我们之前接触的很少,但是稳定性也是衡量一个排序算法的重要标准。什么是稳定排序呢?比如有一组有重复待排序的数据,排序前后,重复的数据顺序不变,此时该排序为稳定排序。否则,叫做不稳定排序。它在实际应用中非常重要的,今天我们就不多说,以后会慢慢分享到。2、什么是插入排序?
插入排序就是通过插入的方式来排序呗,如将打乱的扑克牌作为未排序区间,手中已经排好序的作为排序区间,每次摸牌的过程称为插入排序。

524415eddd8a785d30302af4c7f3faf6.png

3、如何实现插入排序?
插入排序的概念已经理解了,那么给你一组数据,如何来进行插入排序呢?

0de8e0a3ea2a21b4fcbd9c8c2a8aba3d.png


首先要将数据划分为两个区间,已排序区间和未排序区间。

879915073a407c02c413a2fe9f0f2b93.png

e8519f434e8bcd3a393ab481f3e0734f.png


从未排序区间取出数据和已排序区间的数据进行比较,如果小于已排序区间的数据,那我们就交换数据。如果交换到已排序区间数据不在大于插入的数据,然后将元素插入进去。

f10e9c0cebf938b8178e67d66ea6df55.gif


最后我们看一下代码实现。

28bb6516606ef20c569a84d65058da97.png

4、插入排序的性能
通过上边的对插入排序的拆分讲解和动画以及代码实现,想必你手写一个插入排序可以轻轻松松写出。但是在实际项目中,还要考虑插入排序的性能怎么样?因为才能更好的选择适当排序应用到项目中去。
4.1 、插入排序的稳定性
再插入排序中,如果存在重复数据的话,前边的元素再插入的过程永远在第二个重复数据的前边,所以插入排序后的重复数据前后顺序不变,所以插入排序是稳定排序算法。
4.2、 插入排序的空间消耗
插入排序的移动方式,需要消耗常量级的额外内存空间存储,也就是代码中的 temp,所以时间复杂度为 O(1),我们上边讲到,空间复杂度为O(1)的是原地排序算法。
4.3 、插入排序的时间效率
插入排序的最好情况就是不需要搬移任何数据,从头到尾寻找插入数据,每次只比较一次即可,即一组有序数据,所以最好时间复杂度为O(n)。如果一组数据正好是倒序输出,那么每次都需要比较移动所有数据,每次移动时 n,n 个数据时间复杂度为O(n²)。对于插入排序的平均时间复杂度,每次插入都要移动数据,插入 n 次,所以平均时间复杂度为 O(n²)。5、总结
插入排序和冒泡排序哪个更好呢?
在元素移动次数上进行分析,如果一组无序的数据通过冒泡排序排好序之后,它的交换次数是这种数据的逆序度;对于插入排序来说也是一样的,移动次数上都是原本数据的逆序度。
元素的移动次数是相同的,那看看元素的交换次数。从代码上分析可以明显看出,冒泡排序的一次交换需要三行代码,而插入排序的交换却需要一行,所以总的交换次数冒泡排序大于插入排序。
可能会问,这两行的差别有那么大吗?移动一次,可以不计较,如果数据很多,想想下,两者的效率差别很轻易的就比较出来了。虽然冒泡排序的时间复杂度和插入排序的时间复杂度是相同的,但是我们实际使用中还是优先选择插入排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值