2013-01-14 84 views
0

我有近排序數組〜1000個對象,如{val: N}並通過區分它們內置Array.prototype.sort對象插入排序陣列

arr.sort(function(a, b) { return a.val - b.val }); 

我已經絆倒http://jsperf.com/javascript-sort/16並試圖用插入排序:

for (i = 1; i < arr.length; i++) { 
    var tmp = arr[i], 
    j = i; 
    while (arr[j-1].val > tmp.val) { 
     arr[j] = arr[j-1]; 
     --j; 
    } 
    arr[j] = tmp; 
} 

但它總是會拋出一個錯誤:TypeError: Cannot read property 'kills' of undefined

哪裏挖?

在此先感謝。

+0

笑! http://jsperf.com/javascript-sort/16中的性能數字是針對一個有序數組的,爲此,該算法(不出所料)花費了線性時間,而不是衆所周知的O(N^2)性能...... – tucuxi

回答

1

你缺少對J A界限檢查循環中:

while (j > 0 && arr[j-1].val > tmp.val) { 
    arr[j] = arr[j-1]; 
    --j; 
}