2013-12-12 25 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的運作。 –