JS排序之冒泡排序详解

JS排序之冒泡排序详解

简介

冒泡排序是最基本,也是最容易实现的排序算法之一。它的基本思想是通过多次循环遍历数组,每次比较相邻两个元素的大小,如果发现顺序不对,就交换它们的位置,通过多次遍历和交换的操作,最终使得整个数组变得有序。

基本思路

  1. 遍历数组,将相邻元素的大小进行比较,如果前面元素大于后面元素,则交换它们的位置;
  2. 继续以相同的方式遍历数组,直到数组中的每个元素都已参加了比较。

算法分析

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

代码实现

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

示例解析

示例1:从小到大排序

var arr = [3, 1, 4, 2, 5];
console.log(bubbleSort(arr)); // 输出 [1, 2, 3, 4, 5]
  • 初始状态:[3, 1, 4, 2, 5]
  • 第一轮遍历,第一次比较:[1, 3, 4, 2, 5]
  • 第一轮遍历,第二次比较:[1, 3, 4, 2, 5]
  • 第一轮遍历,第三次比较:[1, 3, 2, 4, 5]
  • 第一轮遍历,第四次比较:[1, 3, 2, 4, 5]
  • 第二轮遍历,第一次比较:[1, 2, 3, 4, 5]
  • 第二轮遍历,第二次比较:[1, 2, 3, 4, 5]
  • 第二轮遍历,第三次比较:[1, 2, 3, 4, 5]
  • 第二轮遍历,第四次比较:[1, 2, 3, 4, 5]
  • 第三轮遍历,第一次比较:[1, 2, 3, 4, 5]
  • 第三轮遍历,第二次比较:[1, 2, 3, 4, 5]
  • 第三轮遍历,第三次比较:[1, 2, 3, 4, 5]
  • 第四轮遍历,第一次比较:[1, 2, 3, 4, 5]
  • 第四轮遍历,第二次比较:[1, 2, 3, 4, 5]
  • 第五轮遍历,无需比较,已排序完成。

示例2:从大到小排序

var arr = [3, 1, 4, 2, 5];
function bubbleSortDesc(arr) {
  var len = arr.length;
  for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
      if (arr[j] < arr[j + 1]) {
        var temp = arr[j + 1];
        arr[j + 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}
console.log(bubbleSortDesc(arr)); // 输出 [5, 4, 3, 2, 1]
  • 初始状态:[3, 1, 4, 2, 5]
  • 第一轮遍历,第一次比较:[3, 4, 1, 2, 5]
  • 第一轮遍历,第二次比较:[3, 4, 2, 1, 5]
  • 第一轮遍历,第三次比较:[3, 4, 2, 1, 5]
  • 第一轮遍历,第四次比较:[3, 4, 2, 1, 5]
  • 第二轮遍历,第一次比较:[3, 2, 4, 1, 5]
  • 第二轮遍历,第二次比较:[3, 2, 4, 1, 5]
  • 第二轮遍历,第三次比较:[3, 4, 2, 1, 5]
  • 第三轮遍历,第一次比较:[2, 3, 4, 1, 5]
  • 第三轮遍历,第二次比较:[3, 2, 4, 1, 5]
  • 第四轮遍历,第一次比较:[2, 3, 1, 4, 5]
  • 第五轮遍历,第一次比较:[2, 1, 3, 4, 5]
  • 第六轮遍历,第一次比较:[1, 2, 3, 4, 5]
  • 第六轮遍历,无需比较,已排序完成。

从两个示例中可以看出,冒泡排序可以根据需求进行升序或者降序排列,但是无论是哪种排序方式,其都具有时间复杂度为O(n^2)的问题,对于大规模的数据进行排序时,效率较低,需要使用其他效率更高的排序算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS排序之冒泡排序详解 - Python技术站

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

相关文章

  • C++实现快速排序(Quicksort)算法

    C++实现快速排序(Quicksort)算法 快速排序(Quicksort)算法是一种常见的排序算法,具有快速、高效、稳定性好等特点,广泛应用于各种工程实践中。 快速排序的基本思想 快速排序的基本思想是:选取一个基准值(pivot),将待排序序列划分成左右两个子序列,左边的子序列中所有元素都不大于基准值,右边的子序列中所有元素都不小于基准值,然后对左右两个子…

    算法与数据结构 2023年5月19日
    00
  • c#实现最简洁的快速排序(你绝对可以看懂)

    下面我将详细讲解“c#实现最简洁的快速排序(你绝对可以看懂)”的完整攻略。 1、什么是快速排序? 快速排序是一种常用的排序算法,其思想是将一个数组划分为两个子数组,然后分别对这两个子数组进行排序。通过不断地递归调用这个过程,最终得到有序的数组。 2、快速排序的步骤 下面是快速排序的步骤: 选择一个基准值(pivot),一般选择数组中的第一个元素。 定义两个指…

    算法与数据结构 2023年5月19日
    00
  • Linux静态链接库使用类模板的快速排序算法

    下面是对“Linux静态链接库使用类模板的快速排序算法”的详细讲解。 简介 静态链接库是一种文件格式,其中包含了许多可共享的目标文件,这些目标文件可以在运行时被动态链接器加载。可以将静态链接库视为预编译的代码,包含在可执行程序中,因此在执行时无需加载库文件,从而提高程序的运行效率。 在Linux下,可以使用静态链接库的方式来实现类模板的快速排序算法,具有较高…

    算法与数据结构 2023年5月19日
    00
  • 基于Go语言实现冒泡排序算法

    基于Go语言实现冒泡排序算法 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行,因而得名“冒泡排序”。该算法因其简单的实现方式和易于理解的原理而广泛应用。 冒泡排序算法实现方式 冒泡排序的算法原理如下: 比较相邻的元素。如果第一个…

    算法与数据结构 2023年5月19日
    00
  • C#递归算法之分而治之策略

    C#递归算法之分而治之策略 简介 递归算法是一种非常重要的算法,使用递归算法可以解决很多复杂的问题。分而治之是一种常用的递归思路,即将一个问题分成若干个子问题,分别解决,然后将它们的解合并起来得到原问题的解。 分而治之策略 分而治之策略就是将一个复杂的问题分成若干个相同或相似的子问题,并且逐个解决这些子问题,最后统合起来得到原问题的解。这种算法适用于一些可分…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中数组随机排序的实现详解

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

    算法与数据结构 2023年5月19日
    00
  • PHP实现常见排序算法的示例代码

    让我来为你详细讲解“PHP实现常见排序算法的示例代码”的完整攻略。 什么是排序算法 排序算法是计算机科学中的基础算法之一,它将一组对象按照特定的顺序排列。排序算法一般都是以数字为例子,但是排序算法同样适用于字符串、日期、结构体等各种类型的数据。 常见的排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这里我们将为大家介绍冒泡排序…

    算法与数据结构 2023年5月19日
    00
  • PHP两种快速排序算法实例

    下面是对PHP两种快速排序算法实例的详细讲解: 1. 快速排序算法介绍 快速排序属于交换排序的一种,是目前应用最广泛的排序算法之一,也是学习算法的重要内容。快速排序算法的基本思想是通过将待排序序列进行划分,并不断递归对子序列进行排序,完成整个序列的排序。 快速排序的基本步骤如下: 选择一个基准值(pivot)。 将待排序数组中小于基准值的元素移动到数组左侧,…

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