排序算法总结

一、常用排序算法

快速排序

插入排序

归并排序

二、使用场景

排序算法适用场景时间复杂度(平均)时间复杂度(最坏)空间复杂度是否稳定
快速排序(Quick Sort) 大规模数据、随机数据、数组排序 O(n log n) O(n²)(选错 Pivot) O(log n)(原地排序) ❌ 不稳定
插入排序(Insertion Sort) 小规模数据、几乎有序数据、在线动态插入 O(n²) O(n²) O(1)(原地排序) ✅ 稳定
归并排序(Merge Sort) 链表排序、大数据量、需要稳定排序 O(n log n) O(n log n) O(n)(额外存储) ✅ 稳定

三、Array.prototype.sort() 

JavaScript 的 sort() 方法默认按 Unicode 码点排序:

console.log(["10", "2", "30"].sort()); // ["10", "2", "30"]

为什么 "10" 排在 "2" 前面?

  • "1" 的 Unicode 码点是 49
  • "2" 的 Unicode 码点是 50
  • "10" 先比较 "1" 和 "2","1" < "2",所以 "10" 被认为比 "2" 小

sort内部使用了什么算法?

JavaScript 的 sort() 方法在不同的 JavaScript 引擎(如 V8、SpiderMonkey、JavaScriptCore)中可能使用不同的排序算法。

目前,V8 引擎(Chrome、Node.js)使用的是 Timsort,而一些其他引擎可能会使用 快速排序(Quick Sort)或归并排序(Merge Sort)

Timsort归并排序(Merge Sort)+ 插入排序(Insertion Sort) 的混合排序算法,具有以下特点:

  • 分块(Runs):先找到数组中的有序片段(Runs)。
  • 插入排序(Insertion Sort):对小的有序片段进行插入排序(适用于小数据)。
  • 归并排序(Merge Sort):再合并有序片段,提高排序效率。
posted @ 2025-02-21 20:41  我是格鲁特  阅读(2)  评论(0编辑  收藏  举报