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