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

yizhihongxing

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日

相关文章

  • PHP 各种排序算法实现代码

    下面我将详细讲解“PHP 各种排序算法实现代码”的完整攻略。 简介 排序算法是计算机科学最常用的算法之一,它可以将一组数据按照特定的排序规则进行排序。在实际的开发中,我们经常需要对数据进行排序,比如搜索引擎对搜索结果页的排序,电商网站对商品列表页的排序等。 目前常见的排序算法有插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序等。下面我们将会分别介绍这…

    算法与数据结构 2023年5月19日
    00
  • 用c语言实现冒泡排序,选择排序,快速排序

    首先我们来讲一下三种基本的排序算法——冒泡排序、选择排序和快速排序,并且给出实现的具体代码。 冒泡排序 冒泡排序是一个非常简单的排序算法,其基本思想是比较相邻两个数的大小,如果前一个数比后一个数大,就将两个数交换位置。通过不断重复这个过程,将最大的数“冒泡”到数组的最后面,这个过程类似于水泡在水中不断冒上来,因此得其名。 具体的实现代码如下: void bu…

    算法与数据结构 2023年5月19日
    00
  • C/C++语言八大排序算法之桶排序全过程示例详解

    C/C++语言八大排序算法之桶排序全过程示例详解 什么是桶排序 桶排序(Bucket Sort)是一种线性排序算法,它的基本思想是将数组内的元素根据某个规则分配到若干个桶中,然后对每个桶内的元素进行排序,最终合并每个桶内的有序元素即可得到原数组的有序结果。 桶排序的主要应用场景是待排序元素的分布比较均匀的情况下,性能表现优于其他排序算法(例如快速排序、归并排…

    算法与数据结构 2023年5月19日
    00
  • Java冒泡排序法和选择排序法的实现

    Java的冒泡排序法和选择排序法都是常用的排序算法,冒泡排序法和选择排序法的原理都很简单,但是实现方法有一些区别。 冒泡排序法 冒泡排序法的原理是通过不断交换相邻的元素,比较他们的大小,将大的数不断上移或者将小的数下移,直到整个序列排好顺序。 以下是Java实现冒泡排序法的代码: public class BubbleSort { public static…

    算法与数据结构 2023年5月19日
    00
  • javascript冒泡排序小结

    JavaScript冒泡排序小结 什么是冒泡排序 冒泡排序是一种经典排序算法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果顺序不对则交换它们,直到没有需要交换的元素为止。 冒泡排序的步骤 冒泡排序的主要步骤如下: 比较相邻的元素。如果第一个比第二个大,就交换它们; 对每一对相邻的元素做同样的工作,从开始的第一对到结尾的最后一对,这样在最后的元素应…

    算法与数据结构 2023年5月19日
    00
  • Python实现查找数组中任意第k大的数字算法示例

    Python实现查找数组中任意第k大的数字算法示例 本文将介绍如何使用Python语言实现查找数组中任意第k大的数字算法,并提供两个示例进行说明。 算法概述 查找数组中任意第k大的数字算法通常采用快速排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再按此方法对这两部分记录分别进行快速排序…

    算法与数据结构 2023年5月19日
    00
  • 级联分类器算法原理解析

    级联分类器算法原理解析 级联分类器算法(Cascade Classifier)是一种应用广泛的计算机视觉算法,主要用于目标检测(Object Detection)。其主要思想是利用一系列分类器进行级联,当目标通过所有的分类器才会被识别,从而提高了目标检测的准确率和效率。本文将详细讲解级联分类器算法的原理、特点和使用步骤,并且提供两个示例说明。 级联分类器算法…

    算法与数据结构 2023年5月19日
    00
  • redis zset实现滑动窗口限流的代码

    Redis ZSET(有序集合)非常适合实现滑动窗口限流。下面是实现滑动窗口限流的Redis ZSET代码攻略: 步骤一:定义一个键和窗口大小 为了使用Redis ZSET实现滑动窗口限流,您需要为每个限流器定义一个键。键的值将存储在Redis Sorted Set中,并且每个元素将具有其分数。我们将使用时间戳作为分数。此外,需要指定每个限制限流器的窗口大小…

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