2013-12-12 23 views
1

我在as3中创建了mergeSort算法。为了去除数组中的第一个元素,我使用了Array.splice(0,1)。然后我记得Array.split()。我比较了两者。
事实证明split()比拼接(0,1)快得多。具有10个元素的阵列
剪接上

30K测试(0,1):平均的5567毫秒
分裂:平均的1956毫秒,2.8倍更快AS3拆分和拼接(0,1)之间的性能差距?

对于较小的阵列,性能差距也小。上阵列

30K测试带2层的元件
剪接(0,1):平均330毫秒
分裂():平均206毫秒,1.6倍更快

可能有人解释对我?这是否与索引有关?
谢谢。

代码:

public static function sort(a:Array):Array{ 
    if(a.length == 1){ 
     return a; 
    } 

    var b = a.splice(a.length/2, a.length); 
    a = sort(a); 
    b = sort(b) 
    var r = new Array; 

    while(a.length && b.length){ 
     if(a[0] < b[0]){ 
      r.push(a.shift()); 
     }else{ 
      r.push(b.shift()); 
     } 
    } 

    while(a.length) 
     r.push(a.shift()); 

    while(b.length) 
     r.push(b.shift()); 

    return r    
} 
+1

没有'split'方法,你的意思是'slice'而不是? –

回答

1

假设卡罗美人蕉是正确的,你相比剪接和切片(未分裂),则得到的结果是可以预料的,因为剪接修改现有的阵列,其通常是更昂贵的比创造两个新的,就像切片一样。

+1

对不起,接受这个答案花了很长的时间。那时候,我并没有意识到stackoverflow的运作。 –