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日

相关文章

  • 浅谈2路插入排序算法及其简单实现

    浅谈2路插入排序算法及其简单实现 概述 2路插入排序算法是插入排序算法的一种变体,其主要思想是将待排序数据集分成两个子序列,分别进行插入排序,最后将两个排好序的子序列合并成一个有序序列。2路插入排序算法比普通的插入排序算法在特定数据集下可以获得更好的排序效果。 实现思路 2路插入排序算法可以分为以下几个步骤: 将待排序数据集按照大小分成两个子序列,分别进行插…

    算法与数据结构 2023年5月19日
    00
  • C语言库函数qsort及bsearch快速排序算法使用解析

    这里是关于C语言库函数qsort及bsearch快速排序算法使用的详细攻略。 qsort排序函数 1. 定义 qsort是C语言标准库中快速排序算法的一个实现函数。它用于对一个数组中的元素进行排序。qsort函数的定义如下: void qsort(void* base, size_t nitems, size_t size, int (*compar)(co…

    算法与数据结构 2023年5月19日
    00
  • MySQL排序原理和案例详析

    MySQL排序的原理主要包括内部排序和外部排序两种方式。内部排序主要用于处理较小的数据集,而外部排序则专门用于处理大型数据集。 在内部排序中,MySQL主要采用快速排序算法进行排序。快速排序是一种常用的分治算法,其核心思想是通过将一个大问题分解成多个小问题并逐步解决,最终将所有小问题关键字的排序结果合并起来得到整个序列的有序排列。 在外部排序中,MySQL采…

    算法与数据结构 2023年5月19日
    00
  • c++实现二路归并排序的示例代码

    C++实现二路归并排序是一种常用的排序算法,本文将介绍该算法的详细实现过程,并提供一些示例说明。 一、简述二路归并排序的原理 二路归并排序是一种基于分治思想的排序算法。核心思想是把一个待排序的序列,不断地拆分为两个子序列,直至每个子序列只剩下一个元素,然后利用递归思想将这些子序列不断地两两合并,最终得到一个有序的序列。 二、C++实现二路归并排序的示例代码 …

    算法与数据结构 2023年5月19日
    00
  • PHP 快速排序算法详解

    PHP 快速排序算法详解 算法原理 快速排序(Quick Sort)是一种高效的排序算法,它的核心思想是分而治之,在序列中选择一个基准元素,将小于基准元素的值放置在基准元素左边,大于基准元素的值放置在基准元素右边,然后再对左右子序列分别执行同样的操作,直到序列有序为止。 具体实现过程如下: 选择一个基准元素 $pivot$,可以随机选择一个元素,也可以选择第…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中几种排序算法的简单实现

    JavaScript中几种排序算法的简单实现 排序算法在计算机科学中是一个基本问题。不同的排序算法具有不同的时间和空间复杂度,选择合适的排序算法可以提高程序的效率。本文介绍了JavaScript中几种排序算法的简单实现,包括冒泡排序、选择排序、插入排序、归并排序和快速排序。 冒泡排序 冒泡排序是最简单的排序算法之一。它重复遍历列表,比较相邻的元素,并交换它们…

    算法与数据结构 2023年5月19日
    00
  • C#实现冒泡排序和插入排序算法

    C#实现冒泡排序和插入排序算法 冒泡排序算法 冒泡排序算法是一种基本的排序算法,其基本思想是通过对相邻的元素进行比较和交换,逐渐把待排序的元素交换到相应的位置上。 在C#中,实现冒泡排序非常简单,代码示例如下: public static void BubbleSort(int[] arr) { int len = arr.Length; for (int …

    算法与数据结构 2023年5月19日
    00
  • C/C++实现快速排序算法的思路及原理解析

    C/C++实现快速排序算法的思路及原理解析 快速排序算法是一种高效的排序算法,它的平均时间复杂度是 O(nlogn),最坏情况下的时间复杂度是 O(n^2)。快速排序算法的核心思想是分治法,通过不断将原问题分解成规模更小的子问题来实现排序。本文将详细讲解 C/C++ 实现快速排序算法的思路及原理解析,包括实现过程和两个示例说明。 快速排序算法实现原理 快速排…

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