开temp空间时只开空间不拷贝会更好吗?

开temp空间时只开空间不拷贝会更好吗?

注意到merge当中每次会对temp的指定部分重新拷贝,那么开空间时数组内容似乎不需要,那么在sort(E[] arr)中第一次开temp空间时这样写相比拷贝传入的arr来说会更好吗?

E[] temp=(E[])new Object[arr.length];


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你的完整逻辑是怎样的?先把你说的这个可能更好的“逻辑”写出来,然后实际测试一下?看看是不是有问题?


加油!:)

  • Wonwayshon 提问者 #1
    ​public static <E extends Comparable> void sort(E[] arr){
    //E[] temp=Arrays.copyOfRange(arr,0,arr.length);
    E[] temp=(E[])new Object[arr.length];
    sort(arr,0,arr.length-1,temp);
    }

    就是用如上开arr.length长度的E数组替换注释掉的部分,运行没有问题时间几乎相同,这样的开空间作法替代拷贝理论上会好一些吗?

    2021-04-08 18:46:53
  • Wonwayshon 提问者 #2
    public static <E extends Comparable> void sort(E[] arr){
    //E[] temp=Arrays.copyOfRange(arr,0,arr.length);
    E[] temp=(E[])new Comparable[arr.length];
    sort(arr,0,arr.length-1,temp);
    }


    2021-04-08 19:22:22
  • liuyubobobo 回复 提问者 Wonwayshon #3

    嗯,明白了。merge 中的 copy 过程是不能省的。


    是的,只是单独开空间性能会更好一些的。但是在现代计算机上,这个性能差距近乎是可以忽略不计的。因为这个拷贝过程其实不是遍历整个数组,一个一个赋值,而是直接一块儿内存的拷贝,类似 C 中的 memcpy。


    继续加油!:)

    2021-04-08 19:26:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2627    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师