5
我注意到,JavaScript排序函數在9以下的Internet Explorer版本中速度非常慢(與Firefox等相比通常要低一個數量級)我正在實施我自己的版本,看看我能做得更好。合併排序工作得體,但似乎排序算法的大多數文檔假設數組被實現爲連續的內存塊。Javascript數組實現爲對象(至少在舊瀏覽器)排序意識到Javascript表示陣列的獨特方式
我想知道,是否有一個排序算法,考慮到事實數組訪問比平常更昂貴?也就是說,試圖優化不僅是比較的數量,而且數量訪問和創建ne的成本通過像splice
和slice
這樣的東西來實現。這是我嘗試合併排序。
function mergeSort(array, compareFunc) {
if (array.length <= 1) {
return;
}
var mid = Math.floor(array.length/2);
var left = array.splice(0, mid);
var right = array.splice(0, array.length);
mergeSort(left, compareFunc);
mergeSort(right, compareFunc);
while ((left.length > 0) && (right.length > 0))
{
if (compareFunc(left[0], right[0]) <= 0) {
array.push(left.shift());
}
else {
array.push(right.shift());
}
}
while (left.length > 0) {
array.push(left.shift());
}
while (right.length > 0) {
array.push(right.shift());
}
return;
}
不是你的問題的直接答案,但底部的這兩個循環應該是'concat's。 – Josh