拆分和拼接之间的AS3性能差距(0,1)



我在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一样。

最新更新