首页 > 编程语言 >js 实现冒泡排序算法

js 实现冒泡排序算法

时间:2024-07-13 20:51:32浏览次数:22  
标签:arr 遍历 swapped 冒泡排序 js 算法 数组 排序

冒泡排序是一种简单的排序算法。它重复地遍历待排序的列表,比较相邻的元素并交换位置,如果它们的顺序错误。这个过程会重复进行,直到整个列表排序完成。下面是用 JavaScript 实现的冒泡排序算法:

function bubbleSort(arr) {
    let n = arr.length;
    let swapped;

    do {
        swapped = false;
        for (let i = 0; i < n - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                // 交换 arr[i] 和 arr[i + 1]
                let temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
                swapped = true;
            }
        }
        // 每次遍历后,最大的元素会移动到数组末尾
        n--;
    } while (swapped);

    return arr;
}

// 示例使用
const array = [64, 34, 25, 12, 22, 11, 90];
console.log("未排序数组: " + array);
const sortedArray = bubbleSort(array);
console.log("排序后数组: " + sortedArray);

解释:

  1. 函数定义bubbleSort(arr) 接受一个数组作为参数。
  2. 变量初始化
    • n:数组的长度。
    • swapped:布尔变量,用于检查是否进行过交换。
  3. 外层循环:使用 do-while 循环,以确保至少执行一次排序过程。
    • swapped 设置为 false,表示当前没有交换。
  4. 内层循环:遍历数组,比较相邻元素:
    • 如果 arr[i] 大于 arr[i + 1],则交换它们的位置,并将 swapped 设置为 true
  5. 减少范围:在每次遍历后,最大的元素会移动到数组的末尾,因此可以减少下一次遍历的范围(n--)。
  6. 返回结果:返回排序后的数组。

示例输出:

未排序数组: 64,34,25,12,22,11,90
排序后数组: 11,12,22,25,34,64,90

这个算法的时间复杂度为 (O(n^2)),适用于小规模数据的排序。

标签:arr,遍历,swapped,冒泡排序,js,算法,数组,排序
From: https://www.cnblogs.com/jocongmin/p/18300707

相关文章

  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源
          博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经......
  • 数据结构题目:几种典型排序算法的实现
    1、实验目的实现几种典型的排序算法2、实验具体要求分别利用直接插入/折半插入/希尔/冒泡/快速/简单选择排序算法实现将待排序序列{26,6,18,8,36,66,56,76,99}由小到大排序,并输出结果。3、实验设计思路(编程语言、模块划分及函数功能描述等)模块划分及函数功能描述:主函数模......
  • Node.js安装与配置
    Node.js的安装与配置[Node.js官网]20.15.1版本下载链接zip包下载设置全局安装文件夹npmconfigsetprefix"F:\dev\env\node\node_global"设置全局缓存文件夹npmconfigsetcache"F:\dev\env\node\node_cache"安装cnpm到本地npminstall-gcnpm--registry=https:/......
  • 【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现
    前言什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:基本数据类型(6种)String、Number、Object、Boolean、null、undefined、symbol(ES6+)引用数据类型Object(function、Array、正则表达式等皆......
  • 【代码随想录|回溯算法 77. 组合】
    代码随想录|回溯算法77.组合,216.组合总和III,17.电话号码的字母组合一、77.组合1.核心代码2.输入输出3.问题总结python一、77.组合内容77.组合1.核心代码代码如下(示例):classSolution:defcombine(self,n:int,k:int)->List[List[int]]:......
  • package.json 脚本配置使用环境文件
    脚本使用环境文件"scripts":{"dev":"vite","build:prod":"vitebuild","build:stage":"vitebuild--modestaging","preview":"vitepreview"}dev:运行开发服务器,默认使用.......
  • [JS] generator基本使用
    next方法与yield关键字generator函数可以返回一个迭代器,通过next方法切换generator的状态。generator函数被调用时并不会执行内部的语句,而是返回一个迭代器对象。迭代器对象首次调用next方法,才开始执行generator函数的语句。直到遇到yield语句,内部的执行中断,返回yield关键字右......
  • 数据结构与算法学习day4之单向链表
    1.单向链表的的定义链表是有序的列表,这是它在内存中的存储,如下图所示:链表是以节点的形式存储的,是链式存储每个节点都包含两个部分,一个是data域,一个是next域指向下一个节点每个节点不一定是连续存储链表分为带头节点和不带头节点2.单向链表的实现思路(1)添加添加节点的......
  • 解决HBuilder X运行微信小程序模拟器Error: pages.json解析失败
    前言如果已经排查很久了,那这就不是你的问题了,大概率是由于你曾经创建了一个路径,在指定PagePath的时候又指向了这个路径,这个操作本身没有问题。但是,如果你曾经对这个路径修改过了,那编译器就会有问题,来品鉴一下这个错误。16:15:36.772请注意运行模式下,因日志输出、sourcem......
  • 探索贪心算法:解决优化问题的高效策略
    贪心算法是一种在每一步选择中都采取当前最佳选择的算法,以期在整体上达到最优解。它广泛应用于各种优化问题,如最短路径、最小生成树、活动选择等。本文将介绍贪心算法的基本概念、特点、应用场景及其局限性。贪心算法的基本概念贪心算法的核心思想是局部最优策略,即在每一步选择......