JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】

JavaScript数据结构与算法之基本排序算法定义与效率比较

概述

排序是计算机科学中最常见的操作之一,是将数据按照一定的顺序重新排列的过程。排序算法被广泛应用于搜索、数据压缩、数据库等领域。JavaScript中常用的基本排序算法有3种:冒泡排序、选择排序和插入排序。本文将详细介绍这三种算法的原理、JavaScript实现以及时间复杂度比较。

冒泡排序

冒泡排序是一种基本排序算法,它的原理是比较相邻两个元素的大小,如果前一个元素比后一个元素大,则交换它们的位置。这样一趟排序后,最大的元素就会出现在最后面,然后再对剩下的元素进行排序,直到整个序列有序。

下面是一个JavaScript实现的冒泡排序算法:

function bubbleSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return arr;
}

冒泡排序的时间复杂度是$O(n^2)$,其中n代表要排序的元素个数。因为它的比较次数和交换次数都很多,所以效率较低。但冒泡排序的优点是它是稳定的,可以保证排序前后相等的元素的相对位置不变。

下面是一个冒泡排序的示例:

let arr = [5, 3, 8, 4, 2];
console.log(bubbleSort(arr)); // [2, 3, 4, 5, 8]

选择排序

选择排序也是一种基本排序算法,它的原理是每次从待排序的元素中选出最小的元素,放到已排序的序列的最后面,直到整个序列有序。

下面是一个JavaScript实现的选择排序算法:

function selectionSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if (i != minIndex) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
  return arr;
}

选择排序的时间复杂度也是$O(n^2)$,其中n代表要排序的元素个数。虽然选择排序的比较次数和交换次数都比冒泡排序少,但是它没有冒泡排序稳定。

下面是一个选择排序的示例:

let arr = [5, 3, 8, 4, 2];
console.log(selectionSort(arr)); // [2, 3, 4, 5, 8]

插入排序

插入排序是一种基本排序算法,它的原理是将待排序的元素逐个插入到已经排好序的序列中,直到整个序列有序。

下面是一个JavaScript实现的插入排序算法:

function insertionSort(arr) {
  let len = arr.length;
  for (let i = 1; i < len; i++) {
    let j = i - 1;
    let temp = arr[i];
    while (j >= 0 && arr[j] > temp) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = temp;
  }
  return arr;
}

插入排序的时间复杂度也是$O(n^2)$,其中n代表要排序的元素个数。虽然插入排序的比较次数和交换次数都比冒泡排序和选择排序少,但是在最坏情况下,插入排序的效率与冒泡排序和选择排序相当。

下面是一个插入排序的示例:

let arr = [5, 3, 8, 4, 2];
console.log(insertionSort(arr)); // [2, 3, 4, 5, 8]

总结

对比冒泡排序、选择排序和插入排序,我们可以发现它们在时间复杂度上有相同的$O(n^2)$,但效率上有所不同。冒泡排序因为交换的次数较多,所以效率比较低;选择排序虽然比较次数和交换次数都比冒泡排序少,但不稳定;插入排序虽然比较次数和交换次数都更少,但在最坏情况下效率与冒泡排序和选择排序相当。

因此在实际应用中,我们要根据数据的特征来选择正确的排序算法,提高排序的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaScript中数组随机排序的实现详解

    下面是我对于“JavaScript中数组随机排序的实现详解”的完整攻略。 概述 在JavaScript中,数组是一个非常有用的数据类型,而随机排序是在处理数组时非常实用的一种技术。本攻略将为你详细讲解如何实现JavaScript数组的随机排序。 方法一:使用sort()方法 JavaScript中的数组包含一个sort()方法,可以对数组中的元素进行排序。我…

    算法与数据结构 2023年5月19日
    00
  • c++ 快速排序算法【过程图解】

    C++ 快速排序算法【过程图解】 快速排序是一种常用的排序算法,其基本原理是通过分治的思想将待排序序列分成若干子序列,使得每个子序列都是有序的。具体实现时,首先选择一定的元素作为基准值,然后将比基准值小的元素全部放在基准值的左边,比基准值大的元素全部放在基准值的右边,这样就将序列分成了分别包含较小元素和较大元素的两个子序列。然后,递归地对子序列进行排序,最终…

    算法与数据结构 2023年5月19日
    00
  • C语言 实现归并排序算法

    C语言实现归并排序算法的攻略如下: 展示归并排序算法思路 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。 然后对每个子序列进行排序,合并成新的有序序列。 重复第二步,直到只剩下一个排序完毕的序列。 C语言代码实现 下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码: #include <stdio.…

    算法与数据结构 2023年5月19日
    00
  • 大数据情况下桶排序算法的运用与C++代码实现示例

    桶排序算法是一种基于计数的排序算法,它的主要思想是把一组数据分成多个桶,对每个桶中的数据进行排序,最后依次把每个桶中的数据合并起来,得到排序后的结果。在大数据情况下,桶排序算法可以大幅减少排序时间,因为它可以快速地将数据分成多个桶,进行并行排序,最终合并起来。 以下是桶排序算法在大数据情况下的运用及C++代码示例: 算法思路 先确定桶的数量,也就是需要将数据…

    算法与数据结构 2023年5月19日
    00
  • TypeScript调整数组元素顺序算法

    下面是详细的攻略: TypeScript调整数组元素顺序算法 在 TypeScript 中实现调整数组元素顺序的算法需要使用到以下两种方法: 方法一:splice() array.splice(startIndex, toRemove, …itemsToAdd) splice() 方法可以实现对数组中指定起始索引 startIndex 开始的若干元素的删…

    算法与数据结构 2023年5月19日
    00
  • C语言实现桶排序的方法示例

    C语言实现桶排序的方法示例 桶排序是一种非常高效的排序算法,它的基本思想是将要排序的数据分到几个有序的桶中,每个桶内部再完成排序,最终按照桶的顺序依次连接起来。在本文中,我们将详细讲解如何使用C语言实现桶排序,并提供两个示例来帮助读者更好地理解它的实现过程。 实现步骤 桶排序的实现过程主要分为以下几个步骤: 创建桶:根据待排序数组的最大值和最小值,确定需要创…

    算法与数据结构 2023年5月19日
    00
  • python递归实现快速排序

    Python递归实现快速排序 快速排序是一种常用的排序算法,递归是快速排序算法的重要部分。 快速排序算法步骤 选择一个基准数(pivot)。 将待排序数组分成左右两个子数组,小于等于基准数的元素放在左边,大于基准数的元素放在右边。 递归地对左右两个子数组进行上述排序过程。 Python代码实现 def quick_sort(arr): if len(arr)…

    算法与数据结构 2023年5月19日
    00
  • 可能是你看过最全的十大排序算法详解(完整版代码)

    针对“可能是你看过最全的十大排序算法详解(完整版代码)”这篇文章,下面是详细的攻略: 标题 首先,该文章的标题是:可能是你看过最全的十大排序算法详解(完整版代码) 文章简介 其次,在文章简介中,作者提到该篇文章是一个完整介绍了十大排序算法并且附有代码实现的文章,可以帮助读者了解这些排序算法的原理和代码实现。 内容 文章的主体部分是对十大排序算法进行详细的讲解…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部