JavaScript 进阶实战课
石川
JavaScript Patterns and Anti-Patterns 等开源项目创建者,O'Reilly 技术评审
15066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
JavaScript 进阶实战课
15
15
1.0x
00:00/00:00
登录|注册

13 | JS引擎如何实现数组的稳定排序?

你好,我是石川。
我们经常将数据结构和算法这两个词连起来说,可是你有没有想过,这两者是什么关系?
可以说数据结构是服务于算法的。这么说比较概括。下面我们就找一个切入点来讲解两者的关系,我们先从排序算法说起。提到排序,我们就要说到常用的数据结构数组,比如在 JS 中我们一般都用过它的排序方法,可是你知不知道排序方法背后用的是哪种算法呢?这一讲,就通过数组了解排序算法,再来看 JS 引擎是如何实现数组的排序的。
在数据结构中,我们大体可以分为两类。第一类是线性表,第二类是非线性表。这里的线性和我们生活中理解的线性没有本质上的区别,意思就是“按顺序的”。数组可以说是一种连续存储的线性表,并且可以算是一种比较基础的线性数据结构了。通过数组,我们可以实现比如之前说过的栈、队列等线性结构。你也可以用它来创建非常经典的非线性结构,比如堆和图。
除了数组以外,另外一种既基础又经典的数据结构就是对象了。对象的一个特点是含有属性,很多时候可以用来作为节点(node),通过节点相连的方式,就可以创建链式结构,比如链表;对象的另外一个特点是它支持键值对(key-value pair),通过这个特点可以用来实现散列表和字典。
回到今天的话题,我们来重点说说数组。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JavaScript引擎中的数组排序算法选择与稳定性问题密切相关。本文从数据结构和算法的角度出发,深入探讨了数组作为一种线性数据结构的优劣势以及在JavaScript中实现数组排序的方法。文章介绍了数组排序的几种方式,包括冒泡排序、选择排序、插入排序、归并排序和快速排序,并分析了它们的原理、特点以及适用场景。此外,还探讨了V8和SpiderMonkey引擎选择不同排序算法的原因,以及稳定性和空间复杂度对排序算法选择的影响。通过全面分析,读者可以了解到不同排序算法的性能特点,以及在不同JS引擎和数据量下可能产生的不同结果。最后,文章提出了思考题,鼓励读者分享对其他JS引擎使用的排序算法的了解,促进交流讨论。整体而言,本文内容丰富,涵盖了数据结构、算法和JavaScript引擎实现数组排序的相关知识,适合对JavaScript开发和算法感兴趣的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 进阶实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • __Initial
    老师,我搜索到的快速排序都是拆成两个数组不断排序后组合在一起,请问不把两个数组拆开的快速排序该怎么写呢

    作者回复: 我理解快排肯定是要partition的哈

    2022-10-29归属地:北京
  • 醉聆风语
    还是没看懂v8在数据量大的时候采用了快排后怎么保证稳定性的

    作者回复: 它基础用的快排,对于较短的数组用插入排序可以降低复杂度。

    2022-10-29归属地:北京
    2
  • 水芹
    那你会说,这样为什么不直接用归并排序,因为归并排序也不是没有问题,在使用归并排序的时候,虽然它是稳定的,但它不是原地排序法,这就造成了它的空间复杂度是 O(n) 这边空间复杂度是指数级吧?
    2023-11-28归属地:上海
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部