13 | JS引擎如何实现数组的稳定排序?
石川
你好,我是石川。
我们经常将数据结构和算法这两个词连起来说,可是你有没有想过,这两者是什么关系?
可以说数据结构是服务于算法的。这么说比较概括。下面我们就找一个切入点来讲解两者的关系,我们先从排序算法说起。提到排序,我们就要说到常用的数据结构数组,比如在 JS 中我们一般都用过它的排序方法,可是你知不知道排序方法背后用的是哪种算法呢?这一讲,就通过数组了解排序算法,再来看 JS 引擎是如何实现数组的排序的。
在数据结构中,我们大体可以分为两类。第一类是线性表,第二类是非线性表。这里的线性和我们生活中理解的线性没有本质上的区别,意思就是“按顺序的”。数组可以说是一种连续存储的线性表,并且可以算是一种比较基础的线性数据结构了。通过数组,我们可以实现比如之前说过的栈、队列等线性结构。你也可以用它来创建非常经典的非线性结构,比如堆和图。
除了数组以外,另外一种既基础又经典的数据结构就是对象了。对象的一个特点是含有属性,很多时候可以用来作为节点(node),通过节点相连的方式,就可以创建链式结构,比如链表;对象的另外一个特点是它支持键值对(key-value pair),通过这个特点可以用来实现散列表和字典。
回到今天的话题,我们来重点说说数组。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
JavaScript引擎中的数组排序算法选择与稳定性问题密切相关。本文从数据结构和算法的角度出发,深入探讨了数组作为一种线性数据结构的优劣势以及在JavaScript中实现数组排序的方法。文章介绍了数组排序的几种方式,包括冒泡排序、选择排序、插入排序、归并排序和快速排序,并分析了它们的原理、特点以及适用场景。此外,还探讨了V8和SpiderMonkey引擎选择不同排序算法的原因,以及稳定性和空间复杂度对排序算法选择的影响。通过全面分析,读者可以了解到不同排序算法的性能特点,以及在不同JS引擎和数据量下可能产生的不同结果。最后,文章提出了思考题,鼓励读者分享对其他JS引擎使用的排序算法的了解,促进交流讨论。整体而言,本文内容丰富,涵盖了数据结构、算法和JavaScript引擎实现数组排序的相关知识,适合对JavaScript开发和算法感兴趣的读者阅读。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 进阶实战课》,新⼈⾸单¥59
《JavaScript 进阶实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- __Initial老师,我搜索到的快速排序都是拆成两个数组不断排序后组合在一起,请问不把两个数组拆开的快速排序该怎么写呢
作者回复: 我理解快排肯定是要partition的哈
2022-10-29归属地:北京 - 醉聆风语还是没看懂v8在数据量大的时候采用了快排后怎么保证稳定性的
作者回复: 它基础用的快排,对于较短的数组用插入排序可以降低复杂度。
2022-10-29归属地:北京2 - 水芹那你会说,这样为什么不直接用归并排序,因为归并排序也不是没有问题,在使用归并排序的时候,虽然它是稳定的,但它不是原地排序法,这就造成了它的空间复杂度是 O(n) 这边空间复杂度是指数级吧?2023-11-28归属地:上海
收起评论