我在as3中创建了mergeSort算法。为了删除数组中的第一个元素,我使用了Array.splice(0,1)。然后我想起了Array.split()。我比较了两者。
事实证明,split()比splice(0,1)快得多。
对具有10个元件的阵列进行30k测试
拼接(0,1):平均5567毫秒
分裂:平均1956毫秒,快2.8倍
对于较小的阵列,性能差距也较小。
阵列上有30k测试,有2个元素
splice(0,1):平均330 ms
split():平均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
}
答案 0 :(得分:1)
假设Carlo Cannas是正确的并且你比较了拼接和切片(不是分割),你得到的结果是预期的,因为splice修改了一个现有的数组,这通常比创建两个新数组更昂贵,就像切片一样。