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日

相关文章

  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

    算法与数据结构 2023年5月19日
    00
  • php排序算法(冒泡排序,快速排序)

    PHP排序算法是常见的编程问题,其中冒泡排序和快速排序是两种常见的算法。下面我会详细讲解这两种算法的原理和实现方法。 冒泡排序 冒泡排序是一种基本的排序算法,其原理是反复遍历要排序的元素,比较相邻元素的大小,若顺序不对则交换位置,一直重复该过程直到所有元素都按照升序排好。 冒泡排序的实现过程可以分为两个步骤: 外层循环控制排序的趟数,循环次数为 $n-1$ …

    算法与数据结构 2023年5月19日
    00
  • Golang算法问题之数组按指定规则排序的方法分析

    下面是“Golang算法问题之数组按指定规则排序的方法分析”的完整攻略: 前言 数组排序是算法问题的一个经典案例,今天将介绍如何使用 Go 语言对数组按照指定规则排序的方法。 算法分析 冒泡排序 冒泡排序是一种非常经典的排序算法,其基本思想是重复地走访过要排序的元素列,每次比较相邻的两个元素,如果它们的顺序错误就交换它们的位置。具体实现方式如下: func …

    算法与数据结构 2023年5月19日
    00
  • 利用C++的基本算法实现十个数排序

    利用C++的基本算法实现十个数排序 1. 算法选择 排序问题常见的算法有冒泡排序、插入排序、选择排序、快速排序等,它们的时间复杂度不尽相同,但在本题目的情况下,十个数的排序任何算法都可以。 为了方便,本文将使用最简单的冒泡排序算法。 2. 代码实现 冒泡排序算法的基本思路是从头到尾扫描一遍数组,比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们…

    算法与数据结构 2023年5月19日
    00
  • Golang排列组合算法问题之全排列实现方法

    下面是对于“Golang排列组合算法问题之全排列实现方法”的完整攻略: Golang排列组合算法问题之全排列实现方法 什么是全排列 全排列,即在一组数的排列中,若任意两个数的位置不同,则称它们的排列是不同的。要求多少个不同的排列数,通常用全排列求解。 全排列实现方法 全排列的实现方式可以采用递归或迭代的方式。 递归实现方式 递归的思想是每次确定一个位置的数字…

    算法与数据结构 2023年5月19日
    00
  • C语言中数组排序浅析

    C语言中数组排序浅析 前言 在C语言中,数组排序是一项非常基础且实用的技能。它可以帮助我们将一个未排序的数组变为有序的,这样方便我们进行各种操作,比如查找、去重、统计频率等等。在本文中,我们将浅析C语言中数组排序的几种方法以及它们的优缺点。 冒泡排序 冒泡排序是一种比较简单易懂的排序方法,在很多初学者的教程中都有涉及。该算法的基本思想是将相邻的元素比较,如果…

    算法与数据结构 2023年5月19日
    00
  • C++STL函数和排序算法的快排以及归并排序详解

    C++ STL函数和排序算法的快排以及归并排序详解 1. 什么是STL? STL(Standard Template Library)是C++标准库中的一部分,它是由若干个模板类和函数构成的集合,提供了一些常用的数据结构和算法。 其中,数据结构包括vector(可变长数组)、list(双向链表)等,算法包括sort(排序)、find(查找)等。 2. STL…

    算法与数据结构 2023年5月19日
    00
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法是计算机科学领域中的一个经典问题,其功能是对给定的一组数进行全排列。在本文中,我们将对该算法的非递归实现和递归实现方法进行详细讲解。本文的代码示例基于C++语言。 非递归实现方法 算法思路 假设我们想对n个数进行全排列,那么我们可以首先将这n个数按照升序排列,然后使用以下步骤: 把这n个数的全排列问题转化为n-1个数的全排列问题; 依次取出每一个数…

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