当前位置: 首页 > Web前端 > JavaScript

day13JS引擎是如何实现数组的稳定排序的?

时间:2023-03-27 12:19:26 JavaScript

在数据结构中,我们大致可以分为两类。第一种是线性表,第二种是非线性表。数组可以说是一个连续存储的线性表;通过数组,我们可以实现前面提到的栈、队列等线性结构。除了数组之外,另一种基础而经典的数据结构就是对象。对象的一个??特征是它包含属性。另一个特点是它支持键值对(key-valuepair)。阵列的优点和缺点是什么?作为一种线性数据结构,数组最大的特点就是连续性,带来的优势是随机存取性能,缺点是插入和删除效率高。数组的缺点是插入和删除。我们假设当有人插队时,整个团队都会后退。在数组中,如果将数据元素插入到队尾,整体时间复杂度仅为O(1)。JS是如何实现数组排序的?其中,冒泡排序和选择排序前两类是理论排序方法,后三类插入、快速排序和合并是应用算法。Chrome使用的V8引擎是快速排序和插入排序的结合,Firefox使用的SpiderMonkey是基于归并实现排序。理论上的排序方法冒泡和选择这两种排序算法:这两种方法使用了比较和交换的方法(compareandswap)。冒泡排序(bubblesort):核心思想是比较相邻的两个数据元素,如果前者大于后者,则交换它们的位置。选择排序(selectionsort):它的核心思想是找到最小的数据元素,把它放在最前面,然后从剩下的数组中找到最小的数据元素,然后把它放在第二位,以此类推。常用的类排序方法插入排序(insertionsort)不同于以往的冒泡和选择排序方法。它不使用比较和交换,而是通过位移插入。归并排序(mergesort)可以看作是一种比较常见的应用排序算法,其复杂度为O(nlogn)。排序的稳定性在ECAMScript的官方文档中。虽然没有规定JS引擎排序的具体实现,但是有一个规则保证数组的排序必须是稳定排序(stablesort)。从理论上讲,虽然合并和快速排序的复杂度是一样的,但是之前我们忽略了两个重要的因素。第一个是时间复杂度的平均和极端情况,第二个是空间复杂度的问题。.快速排序的空间复杂度在平均情况下为O(nlogn),但在极端情况下为O(n2)。还有一种排序方法叫做线性排序法,因为他们使用的是非比较排序方法,包括计数排序、桶排序和基数排序,因为这些排序算法是针对特殊场景使用的。