從網頁開發者技術文件說明中知道git
sort() 方法會原地(in place)對一個陣列的全部元素進行排序,並回傳此陣列。排序不必定是穩定的(stable)。預設的排序順序是根據字串的 Unicode 編碼位置(code points)而定。github
在文件中,說明sort方法能夠直接使用callback function帶入數值來作比較,達到數值陣列排序。我們來看下面的程式碼ui
var numbers = [1, 100, 10, 2, 200, 20]; numbers.sort(function(a, b) { return a - b; }); console.log(numbers);
可是function(a, b)方法是利用什麼原理來達成數值陣列排序的呢? spa
緣由出在Sort這個方法是由Javascript Engine所提供的sort。以瀏覽器Google Chrome (V8)為例,Sort方法是使用InsertionSort跟QuickSort實作出來的。當陣列長度小於等於10,就以InsertionSort來作排序。若是以上述的例子來追蹤一下,不難發現其排序過程就是InsertionSort。有興趣的人能夠參考Github上的V8 JavaScript的陣列array.js,另外想要理解什麼是InsertionSort的人,請參考其做法。code
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);
程式碼結果blog
最後這個過程,終於解開我心中的疑問。排序