2013-01-14 68 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; 
}