JS中Array物件sort函數之理解
從網頁開發者技術文件說明中知道
sort() 方法會原地(in place)對一個陣列的所有元素進行排序,並回傳此陣列。排序不一定是穩定的(stable)。預設的排序順序是根據字串的 Unicode 編碼位置(code points)而定。
在文件中,說明sort方法可以直接使用callback function帶入數值來做比較,達到數值陣列排序。我們來看下面的程式碼
var numbers = [1, 100, 10, 2, 200, 20];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
但是function(a, b)方法是利用什麼原理來達成數值陣列排序的呢?
原因出在Sort這個方法是由Javascript Engine所提供的sort。以瀏覽器Google Chrome (V8)為例,Sort方法是使用InsertionSort跟QuickSort實做出來的。當陣列長度小於等於10,就以InsertionSort來做排序。如果以上述的例子來追蹤一下,不難發現其排序過程就是InsertionSort。有興趣的人可以參考Github上的V8 JavaScript的陣列array.js,另外想要理解什麼是InsertionSort的人,請參考其作法。
var numbers = [1, 100, 10, 2, 200, 20];
numbers.sort(function(a, b) {
console.log(numbers);
console.log('a=' + a + ' b= ' + b)
return a - b;
});
console.log(numbers);
程式碼結果
最後這個過程,終於解開我心中的疑問。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。