JS 冒泡排序

JavaScript-数组冒泡排序方法 JavaScript-数组冒泡排序 1、数组冒泡排序(原理版) <script> /* 冒泡法排序 : sort()原理 核心原理 : 数组中相邻的元素比较大小,然后交换位置 */ var arr = [88,20,100,60,50];//[20,50,60,80,100] //遍历数组,相邻元素比较,交换位置 for(var j = 0;j < ar 阅读详情

算法简介

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序不符合要求就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(数组的最前面)。

代码

第一种写法

function bubbleSort(arr) {

    if (!Array.isArray(arr)) {
        return;
    }

    let sortedFlag = true;     //是否是已经有序
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[i]) {
                let temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;

                sortedFlag = false;
            }
        }

        // 优化:如果是本身就是有序的,那么就不需要再继续循环了。
        if (sortedFlag) {
            break;
        }
    }
}

解读:

  1. 从数组第一个元素开始,依次与其后面的元素比较,若其比后面的元素大,则交换两元素的位置。这样的话,一轮过后,数组中最小的元素就是被放在数组的最前面。前面已经排好序的就不动,不参与比较。
  2. 重复步骤1,直到n-1个元素都排好序,那么最后一个就不用比较了,肯定就是其中最大的元素。

第二种写法

function bubbleSort2(arr) {
    if (!Array.isArray(arr)) {
        return;
    }

    let sortedFlag = true;     //是否是已经有序
    var len = arr.length;
    for (var i = 0; i < len - 1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {     // 这里 -i是减去已经排好序的个数   每一轮都会把最大的元素放到最后面
            if (arr[j] > arr[j + 1]) {              // 相邻元素两两对比  前一个比后一个大就交换位置
                var temp = arr[j + 1];              // 元素交换
                arr[j + 1] = arr[j];
                arr[j] = temp;

                sortedFlag = false;
            }
        }

        // 优化:如果是本身就是有序的,那么就不需要再继续循环了。
        if (sortedFlag) {
            break;
        }
    }
}

解读:

  1. 从数组第一个元素开始,依次与其后相邻的元素比较,若其比后面的元素大,则交换两元素的位置。这样的话,一轮过后,数组中最大的元素就是被放在数组的最后面。已经排好序的元素就不动,不参与比较。
  2. 重复步骤1,直到n-1个元素都排好序,那么最后一个就不用比较了,肯定就是其中最小的元素。

小优化
注意此处有个优化,就是如果本身数组就是有序的,那么经过一轮循环后,是可以不用继续循环了,正是因为这个,可以极大的优化算法性能。

时间复杂度和空间复杂度

再谈谈冒泡排序的时间复杂度和空间复杂度吧!

时间复杂度

  1. 我们看下最好的情况,也就是本身就是有序数组,那么经过一轮循环后,如果没发生交换位置,那么可以知道sortedFlag等于true,直接跳出循环。这个最好情况,也循环了n次。
  2. 如果并非是有序的,就要循环遍历了。最坏的情况就是完整的经历两轮n次循环。
  3. 如果数组本身不是有序的,都要经历两轮循环,只不过比最坏的情况要好。
  • 最好的情况:O(n)
  • 最坏的情况:O(n^2)
  • 平均:O(n^2)

空间复杂度
O(1),基本是个定值,除了数组本身和临时变量占用内存,并没有额外用到很多内存。

如有错漏,欢迎大佬们拍砖~

AI编程工具深度横评2026:Claude Code × Cursor × Trae × OpenCode,7场景实测+完整免费配置 2026年AI编程工具已进入"自主Agent"时代:Claude Code以80.8% SWE-bench得分领跑编程能力,Cursor 3在用户体验和多Agent协作方面突出,GitHub Copilot保持企业市场优势。这些工具分别代表不同的使用哲学:命令行原生、IDE分支、平台集成、编辑器扩展和后起之秀。本文从开发者视角出发,通过7个真实编程场景的系统性测试,给出每款工具在具体场景下的表现评估和免费使用完整配置方案。所有代码均可直接复制运行,所有工具均有免费使用路径。 阅读详情

相关推荐

fMRI数据处理:从DICOM到NIFTI(上)

哈喽,这里是系列fMRI数据处理文章专栏。包括从核磁拷贝完DICOM格式的文件,到整理数据,检查数据,数据预处理,后续分析等等内容。如果你是一个初学者,特别是心理学或者是刚踏入认知神经科学的小白,那么这个专栏可以帮助你从头到尾完成数据处理直到结果的可视化。如果你已经进入了认知神经科学领域,这里面的内容可能过于细致,并且找不到你想要的答案,不过可以在帖子下留言评论,欢迎大家提供宝贵的意见!如果是医学相关,可能这些内不太准确或专业,谨慎参考!

weixin_44933894的博客 2482

算法分析:冒泡

求和 符号是,一般用法是,表示1+...+100,表示 2*1 + ...... + 2*100 分析的维度 主要是有 比较次数(最坏情况,最好情况,平均情况) 交换次数(最坏,最好, 平均) 辅助空间(最坏,最好,平均) 为了方便,很多分析会把一次比较和一次交换看做耗时相同的一次操作。不过在算法执行过程中,交换次数总是少于(甚至远远少于)比较次数。所以有的分析方法只关注比较...

qq_29454347的博客 526

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升

本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。

weixin_29227425的博客 271

冒泡原理自己的总结

冒泡排序是一种算法,把一系类的数据按照一定的顺序进行排列显示(从小到大,从大到小) 我们冒泡排序要用到双层for循环 外层循环控制的是趟数,趟数是固定的 (数组的长度-1) 里层循环控制的是每一趟的交换次数是不固定的(数组的长度-i-1) 代码的实现方式 var arr = [5,4,3,2,1] for(var i=0;i<arr.length-1;i++){ for(var j=...

piaocanY的博客 539

OneNET物模型实战:如何用NB-IOT模块上传JSON数据并解析

本文详细介绍了如何利用NB-IOT模块将传感器数据上传至中国移动OneNET物联网平台,并利用其物模型功能实现JSON数据的自动解析。文章从理解OneNET物模型与OneJson协议入手,逐步讲解了平台侧物模型创建、设备注册,以及设备端数据构造、HEX编码与NB-IOT模块AT指令上报的全流程,并提供了关键的调试技巧与常见问题排查方法,为物联网开发者提供了完整的实战指南。

sugar的博客 680

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1607

经典排序算法(1)——冒泡排序算法详解

冒泡排序是一种交换排序。 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。 算...

LinDongTian 1504

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2131

js实现冒泡排序

冒泡排序原理: 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这......

不想起床 7万+

使用 MATLAB/Simulink + Deep Learning Toolbox,构建一个基于LSTM的电网负荷预测模

本文介绍了一个基于Simulink和深度学习的智能电网负荷预测与调度建模方法。通过LSTM神经网络构建负荷预测模型,将历史负荷、天气、日期等特征作为输入,预测未来24小时负荷。然后将训练好的模型集成到Simulink仿真系统中,结合发电单元模型和经济调度逻辑,实现预测驱动的电力调度优化。实验结果表明,该方法预测误差在2.5%-4.0%之间,相比传统调度方式可降低15%-25%的运行成本。文章详细展示了从数据准备、特征工程、模型训练到系统集成的完整流程,为智能电网中AI技术的应用提供了实用参考。

amy_mhd的博客 170

机器人视觉联动精度优化:从±2mm到±0.02mm,产线级手眼标定全实战

2025年我接东莞长安Type-C接口分拣项目的时候,就是栽在了手眼标定上:实验室里标定完精度±0.5mm,一到产线直接掉到±2mm,机器人10次有3次抓不住,2000多件Type-C接口直接报废,还撞坏了2套汇川SCARA机器人的吸盘,本来45天的工期拖了3个月,不仅没赚到钱,还倒贴了几万块。手眼标定从来不是简单的跑个demo、算个矩阵就完事了,它是一个系统工程:从硬件选型、安装固定、相机标定、标定流程、算法优化、环境控制、重复验证,每一个环节都会影响最终的联动精度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 384

JS——冒泡排序

冒泡排序实现过程 冒泡排序 冒泡排序是一种非常基础的排序方法,其原理就是把一个数组中的每一个数从前往后依次进行比较,然后根据大小交换位置,每一轮的比较都确定出一个当轮比较的最大值,最终实现数组的大小排序。从下到大排序下面我们用JS实现冒泡排序。 实现过程 举例:假设数组有n个数,需要n轮,而每一轮中比较的次数都要减去已经确定的数值,即第i轮需要比较的次数为n-i,可以用一个嵌套for循环来实现。 为了看清楚整个排序的过程,我们将每一次排序的结果输出到控制台,代码如下: var arr = [4,23,10.

weixin_52148548的博客 2万+

【深度学习】什么是交叉注意力机制?

输入序列:自注意力机制在同一个输入序列内建立注意力,交叉注意力机制在不同的输入序列间建立注意力。应用场景:自注意力机制多用于单一模态的任务(如纯文本任务),交叉注意力机制多用于多模态任务(如图像和文本的结合)。计算过程:自注意力机制的查询、键和值都来自同一个输入序列,而交叉注意力机制的查询来自一个输入序列,键和值来自另一个输入序列。

q742971636的博客 7369

冒泡排序算法JS代码javascript

冒泡排序算法JS代码javascript 冒泡排序原理 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换的元素,也就是说数列已经排序完成。

Moony_wy的博客 1146

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

html使用js冒泡排序,JavaScript中的冒泡排序法

利用sort()冒泡排序:var arr = [5,39,8,1,2,13,55];arr = arr.sort(function(a,b){return a-b});console.log(arr);//1,2,5,8,13,39,55不声明第三个变量冒泡排序:第一层遍历数组的个数(要遍历多少次),第二次遍历(共要循环几次)a = 10; //第一个元素b = 5; //下一个元素if(a&gt...

weixin_36196497的博客 499

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

html使用js冒泡排序,javascript如何实现冒泡排序?

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。JavaScript中实现冒泡排序的思路:数组中有 n 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置;这样一来,第一轮就可以选出一...

weixin_36296064的博客 386

JavaScript实现冒泡排序

说明 对数组进行 冒泡排序 算是比较简单的,冒泡排序也是容易理解的一种排序算法了,在面试的时候,很可能就会问到。 实现原理 比较每相邻两个数,如果前者大于后者,就把两个数交换位置;这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。 好的,我们先来实现找数组中的最大数,并把他放到数组最后。 va...

FEWY的博客 3万+

JavaScript实现冒泡排序算法

一、冒泡排序 冒泡排序是一种非常基础的排序方法,其原理就是从把一个数组中的每一个数从前往后依次进行比较,然后根据大小交换位置,每一轮的比较都确定出一个当轮比较的最大值,最终实现数组的大小排序。下面我们用JS实现冒泡排序。 二、JS实现 1、创建待排序数组 var arr = [4,23,100,9,7,49,36,57]; 2、确定轮数 假设数组中有n个数,则需要n轮,而每一轮中比较的次数都要减...

技术无止境,人生仍探索。 2万+

JavaScript(JS)—冒泡排序

原理:数组内相邻的两个元素两两比较,较小的放在前位,较大的放在后为,一次循环后,最小或最大的元素就会排在第一位,第二次循环也是如此,如此类推,知道所有元素排序完成。举例:假设一个数组有n个元素,则需要n轮,而每一轮次中比较的次数都要减去已经确定好顺序的数值,即第i论需要比较的元素为n-1个,可以使用for循环实现。②:对每一个相邻元素进行同样的操作,从开始第一对到结尾最后一对元素,这样在最后的元素则会是最大或者最小的数;③针对所有的元素重复以上步骤,除了最后一个;这样一个简单的冒泡排序就完成了!

weixin_44126720的博客 476

【javaScript数组求最大值以及冒泡排序,函数封装冒泡排序】js冒泡排序,求最大值

javaScript数组求最大值以及冒泡排序,简单易懂 求最大值: <script type="text/javascript"> var arr = [5,8,7,2,5000,9,89]; var max = arr[0];//让max得到数组第一个值,然后让它去和数组中的每一个比较 for (var i = 0; i<arr.length; i++){ if(arr[i]>max){//如果有大于max的就重新赋值给max max = a

qq_64115060的博客 1964

html使用js冒泡排序,JS实现冒泡排序

作为前端开发者,你需要使用js去做任何事情。虽然排序在浏览器端没有什么太大的用处,尤其是对数组的排序,毕竟存在Array.prototype.sort()这个内置的方法。冒泡排序就是每次比较两个值,将最大或最小值“浮动”到一侧。如(从小到大):var arr = [2,9,1,4,5];第一组比较(找出最大值),将其“冒泡”到最右侧第一次比较 2与9,[2,5]第二次比较9与1,[2,5]第三次比...

weixin_35051143的博客 685

Js的冒泡排序

Js的冒泡排序: 所得出的值:

qq_43378800的博客 161

js冒泡排序的四种方法

js冒泡排序的四种方法 基础知识比较简单 仅供参考 //参考排序的数组 var arr = [3, 2, 5, 1, 4] *第一种 这种方法冒泡排序 比较相邻的两个元素,如果前一个比后一个大,则交换位置。 第一轮把最大的元素放到了最后面。 由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比 function arr_sort(data) { var temp for(var i = 0; i<data.length-1;i++) { for(var j = 0

gebilaoaodang的博客 1413

冒泡排序——JS实现

js实现冒泡排序代码: function bubbleSort(arr) { var i = arr.length, j; var tempExchangVal; while (i > 0) { for (j = 0; j < i - 1; j++) { if (arr[j] > arr[j + 1]) { tempExchangVal = arr[j]; a

艺术编程 1148

js冒泡排序

JS实现冒泡排序 代码示意图 结果如图

TimgdZz的博客 93

js数组的冒泡排序

js数组的冒泡排序 冒泡排序的基本思想:所谓冒泡就是泡泡一个个往上冒,让体积最轻的泡泡浮在最上面,然后按 照重量往下依次排列。 在数组中就是比较相邻两个元素的位置; 首先我们定义一个数组 var arr=[12,3,43,11,56,90,7,66,82]; 做一个升序排序。第一轮循环我们得把值最大的数从数组中找出 来放在数组最后,即索弓|为a.length-1的位置。也就是从a[0]开始,依次往后比较相邻 两个数的大小。 按照思路: 首先是arr[0]和arr[1]比较,如果arr[0]>a[1]

TXW6666的博客 581

【JavaScript】使用js实现冒泡排序

3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。2、比较完第一轮的时候,最后一个元素是最大的元素。3、依次类推,每轮冒泡都能得到一个最大值。...

叶子yes的博客 1278
上一篇: 在Cocos Creator Store中下载的插件和代码存放在哪里呢?
下一篇: JS 插入排序
大头爱学习
博客等级 码龄7年 14粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值