我有一组近似排序的〜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 :(得分:1)
你在循环中缺少对j的边界检查:
while (j > 0 && arr[j-1].val > tmp.val) {
arr[j] = arr[j-1];
--j;
}