JavaScript常用排序算法中,快速排序是高效O(n log n)的分治算法,选基准值划分数组并递归排序,原地实现但最坏O(n²),不稳定,适合无序数据。

JavaScript 中常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。其中,快速排序和归并排序是两种高效、实用的 O(n log n) 级别排序算法,适合处理中大型数组。它们在原生 Array.prototype.sort() 的底层实现中也常被参考(V8 引擎目前主要用 Timsort,是归并+插入的混合优化版本)。
快速排序(Quicksort)原理与实现
核心思想是“分治”:选一个基准值(pivot),将数组分为三部分——小于 pivot 的、等于 pivot 的、大于 pivot 的,再递归排序前后两部分。
不依赖额外空间(原地排序),但最坏时间复杂度为 O(n²),平均为 O(n log n)不稳定排序(相等元素的相对位置可能改变)适合内存受限、数据基本无序的场景
简易实现(非原地,更易理解):
function quickSort(arr) { if (arr.length <= 1) return arr;const pivot = arr[Math.floor(arr.length / 2)];const left = [];const right = [];const equal = [];
for (let val of arr) {if (val pivot) right.push(val);else equal.push(val);}
return [...quickSort(left), ...equal, ...quickSort(right)];}// 使用示例console.log(quickSort([3, 6, 8, 10, 1, 2, 1])); // [1, 1, 2, 3, 6, 8, 10]
归并排序(Merge Sort)原理与实现
也是分治法:把数组不断二分直到单元素,再逐层合并两个已排序子数组,合并时按顺序归并。
立即学习“Java免费学习笔记(深入)”;
稳定排序(相等元素顺序不变)时间复杂度稳定为 O(n log n),但需 O(n) 额外空间适合链表排序或需要稳定性的场景(如按多个字段排序)
递归 + 合并实现:
function mergeSort(arr) { if (arr.length <= 1) return arr;const mid = Math.floor(arr.length / 2);const left = mergeSort(arr.slice(0, mid));const right = mergeSort(arr.slice(mid));
return merge(left, right);}
function merge(left, right) {let result = [];let i = 0, j = 0;
while (i < left.length && j < right.length) {if (left[i] <= right[j]) {result.push(left[i++]);} else {result.push(right[j++]);}}
return result.concat(left.slice(i)).concat(right.slice(j));}// 使用示例console.log(mergeSort([38, 27, 43, 3, 9, 82, 10])); // [3, 9, 10, 27, 38, 43, 82]
实际开发中怎么选?
绝大多数情况直接用原生 sort() 即可,它针对不同长度和数据特征做了高度优化;手动实现主要用于学习、面试或特殊需求(如自定义比较逻辑、避免副作用、排序对象属性等)。
对数字排序,记得传比较函数:[3, 1, 2].sort((a, b) => a - b),否则会按字符串排序想稳定排序且控制细节,归并排序更可靠;想节省内存且接受不稳定,可考虑快排变体小数组(
基本上就这些。理解思路比死记代码更重要——分治、递归、合并/分区,掌握这两类模式,其他排序也能举一反三。
以上就是javascript中的排序算法有哪些_如何实现快速排序或归并排序的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1543259.html
微信扫一扫
支付宝扫一扫