首页 > web前端 > js教程 > 正文

javascript中的排序算法有哪些_如何实现快速排序或归并排序

狼影
发布: 2025-12-17 19:43:48
原创
174人浏览过
JavaScript常用排序算法中,快速排序是高效O(n log n)的分治算法,选基准值划分数组并递归排序,原地实现但最坏O(n²),不稳定,适合无序数据。

javascript中的排序算法有哪些_如何实现快速排序或归并排序

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;
<p>const pivot = arr[Math.floor(arr.length / 2)];
const left = [];
const right = [];
const equal = [];</p><p>for (let val of arr) {
if (val < pivot) left.push(val);
else if (val > pivot) right.push(val);
else equal.push(val);
}</p><p>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免费学习笔记(深入)”;

歌者PPT
歌者PPT

歌者PPT,AI 写 PPT 永久免费

歌者PPT 358
查看详情 歌者PPT
  • 稳定排序(相等元素顺序不变)
  • 时间复杂度稳定为 O(n log n),但需 O(n) 额外空间
  • 适合链表排序或需要稳定性的场景(如按多个字段排序)

递归 + 合并实现:

function mergeSort(arr) {
  if (arr.length <= 1) return arr;
<p>const mid = Math.floor(arr.length / 2);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));</p><p>return merge(left, right);
}</p><p>function merge(left, right) {
let result = [];
let i = 0, j = 0;</p><p>while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
result.push(left[i++]);
} else {
result.push(right[j++]);
}
}</p><p>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中的排序算法有哪些_如何实现快速排序或归并排序的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号