数组和链表插入效率比较

数组和链表将对象插入指定位置时,大致可以分为两个步骤:

1、找到要插入元素的位置

2、进行插入操作

可以得到等式:找到位置所需时间 + 插入所需时间 = 将对象插入指定位置所需总时间

 

由此可以先假设几个值:

      找到插入元素的位置涉及的变量:

             要插入的位置为z

             获取一个对象引用所需时间m

     进行插入操作涉及的变量:

             移动一个对象所需的时间,数组和链表相同:x

     数组和链表中的对象数为y

     执行插入操作时,所需总的时间:t

 

对于数组:

查找所需时间:m*1

移动元素所需时间 (插入所需时间):(y-z)x

将对象插入指定位置所需时间:m*1+(y-z)x = t

 

对于链表:

查找所需时间:m*z

移动元素所需时间 (插入所需时间):2x

将对象插入指定位置所需时间:m*z+2x = t

 

数组公式->m+(y-z)x = t 中,m对t的影响因素很小,对其进行省略,可得:(y-z)x = t

链表公式->m*z+2x = t 中,2x对t的影响因素很小,对其进行省略,可得:m*z = t

 

我们可以得出当数组和链表执行插入操作,所用时间相等时的式子:

(y-z)x = m*z

   y/z      = m/x + 1

由于不同环境(不同的系统、应用等),m/x的比例不同,y/z也可能不同

 

这里就假设m/x = 1,可得:

y/z = 2  ;  y/2 = z ;

就是说当执行插入操作的位置在对象总数的二分之一时,两种容器插入元素所需的时间相等。

插入的位置在二分之一前时,数组所需时间较多;

插入位置在二分之一后时,链表所需时间较多。

 

当然,实际情况是,由于不同的计算机之间存在差异(获取对象引用、移动对象等所需的时间不同),

数组和链表执行插入操作所需时间相等的点,并不固定。

就是说,由于实际情况不同,有可能执行插入操作的位置在3/4,但是数组所用时间比链表的多(如果x太大,或其他因素);

可能执行插入操作的位置在1/4,但是链表所用时间比数组的多(如果m太大,或其他因素)

 

注意:以上讨论是在一个前提下进行的,将对象插入指定位置!将对象插入指定位置!将对象插入指定位置!。

(不是按值查找要插入对象的位置然后进行插入)

原文链接:https://blog.csdn.net/zaiRenJian_c/article/details/80537344

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值