JS排序之冒泡排序详解

yizhihongxing

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日

相关文章

  • JS折半插入排序算法实例

    下面是介绍JS折半插入排序算法的完整攻略。 什么是折半插入排序算法? 折半插入排序是插入排序的一种改进算法,它的基本思路是利用二分查找找到某个待排元素在已排序序列中插入位置。 折半插入排序算法的时间复杂度为 O(nlogn),比普通插入排序 O(n^2)快。 折半插入排序算法实现步骤 折半插入排序算法的实现步骤如下: 从第二个元素开始,将整个序列分为已排序区…

    算法与数据结构 2023年5月19日
    00
  • 基于C++实现的各种内部排序算法汇总

    基于C++实现的各种内部排序算法汇总 概述 本攻略汇总了常见的基于C++实现的内部排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、归并排序、快速排序、堆排序。以下是算法的具体实现过程。 选择排序 选择排序的核心思想是每次找到未排序序列中的最小值,然后放到已排序序列的末尾。具体实现过程如下: void selection_sort(vector<i…

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

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

    算法与数据结构 2023年5月19日
    00
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种) 排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。 快速排序 快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部…

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

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

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

    让我先给出该攻略的大纲: 算法类的设计思路 冒泡排序算法示例 快速排序算法示例 使用算法类进行排序 接下来,我将详细讲解每一步内容。 1. 算法类的设计思路 首先,我们需要为排序算法创建一个类,这个类应该包含常见排序算法的实现函数。这些函数应该是静态函数,以便我们可以直接访问它们,而不必实例化排序类。 我们还需要实现一些通用的辅助函数,这些函数可以在算法函数…

    算法与数据结构 2023年5月19日
    00
  • PHP简单选择排序(Simple Selection Sort)算法学习

    PHP简单选择排序(Simple Selection Sort)算法学习 算法介绍 简单选择排序,也称直接选择排序,是一种简单直观的排序算法,其基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序的时间复杂度为 $O(n^2)$,不适用于大规模数据排序。但选择排序的思想被很多高级排序…

    算法与数据结构 2023年5月19日
    00
  • python manim实现排序算法动画示例

    首先,为了能够实现“python manim实现排序算法动画示例”,我们需要以下准备工作: 安装python及相关依赖:Manim(用于动画制作)、Numpy(用于数值计算)等。 了解Python编程语言的基础语法和数据类型。 接下来,我们可以按照以下步骤进行排序算法动画制作: 选择一种排序算法,并按照代码形式将其实现。 使用Python的可视化库,将算法过…

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