2

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);

程式碼結果

图片描述

最後這個過程,終於解開我心中的疑問。


d89921027
9 声望0 粉丝