JS中Array物件sort函數之理解

JS中Array物件sort函數之理解

網頁開發者技術文件說明中知道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

圖片描述

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

相關文章
相關標籤/搜索