關於Chrome V8 引擎的 source code 所實作背後的運作原理:
function InnerArraySort(array, length, comparefn) {
// In-place QuickSort algorithm.
// For short (length <= 10) arrays, insertion sort is used for efficiency.
if (!IS_CALLABLE(comparefn)) {
comparefn = function (x, y) {
if (x === y) return 0;
if (%_IsSmi(x) && %_IsSmi(y)) {
return %SmiLexicographicCompare(x, y);
}
x = TO_STRING(x);
y = TO_STRING(y);
if (x == y) return 0;
else return x < y ? -1 : 1;
};
}
註釋寫著他是用「Quick Sort」,而當陣列長度<=10 時,為了提升效能會改用「Insertion Sort」。
問題:對於陣列的排序為甚麼在陣列長度<=10的時候,會因為提升效能而改用插入排序法而不是全都用快速排序法?
謝謝大家
當問題的資料量較小時(欲排序的元素之數目較小),使用Insertion Sort會很有效率,這是因為和Quick Sort、Merge Sort、Heap Sort相比,Insertion Sort不具有「遞迴」形式,因此不需要系統的stack
其實如果只有10筆
用QuickSort應該也沒有什麼差