【JavaScript 算法】冒泡排序:简单有效的排序方法

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

    • 一、算法原理
    • 二、算法实现
    • 三、应用场景
    • 四、优化与扩展
    • 五、总结

在这里插入图片描述

冒泡排序(Bubble Sort)是一种基础的排序算法,通过重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换它们的位置,直到整个数列有序。虽然冒泡排序的效率不高,但其实现简单,适用于小规模数据的排序。本文将详细介绍冒泡排序算法的原理、实现及其应用。


一、算法原理

冒泡排序通过相邻元素的比较和交换,使较大的元素逐渐“冒泡”到数列的末尾。其基本步骤如下:

  1. 从数列的起始位置开始,依次比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素,则交换它们的位置。
  3. 继续遍历数列,重复上述步骤,直到数列末尾。
  4. 每一轮遍历后,数列中最大的元素会被移动到正确的位置。
  5. 重复步骤1-4,忽略已经排好序的部分,直到整个数列有序。

在这里插入图片描述


二、算法实现

以下是冒泡排序的JavaScript实现:

/*** 冒泡排序算法* @param {number[]} arr - 需要排序的数组* @return {number[]} - 排序后的数组*/
function bubbleSort(arr) {const len = arr.length;for (let i = 0; i < len; 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;
}// 示例
const arr = [5, 2, 9, 1, 5, 6];
const sortedArr = bubbleSort(arr);
console.log(sortedArr); // 输出: [1, 2, 5, 5, 6, 9]

三、应用场景

  1. 小规模数据排序:冒泡排序适用于小规模数据的排序,因其实现简单。
  2. 教学演示:作为一种基础排序算法,冒泡排序常用于教学和演示算法思想。
  3. 部分有序数据:如果数据几乎有序,冒泡排序可以很快完成排序。

四、优化与扩展

  1. 优化冒泡排序:通过设置一个标志位,可以提前终止排序过程,从而提高效率。
/*** 优化冒泡排序算法* @param {number[]} arr - 需要排序的数组* @return {number[]} - 排序后的数组*/
function optimizedBubbleSort(arr) {const len = arr.length;let swapped;for (let i = 0; i < len; i++) {swapped = false;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]];swapped = true;}}// 如果没有发生交换,提前结束排序if (!swapped) break;}return arr;
}// 示例
const optimizedArr = optimizedBubbleSort(arr);
console.log(optimizedArr); // 输出: [1, 2, 5, 5, 6, 9]
  1. 双向冒泡排序:也称鸡尾酒排序,通过从两端向中间排序,进一步优化性能。
/*** 双向冒泡排序算法(鸡尾酒排序)* 该算法通过从两端向中间排序,进一步优化冒泡排序的性能。* @param {number[]} arr - 需要排序的数组* @return {number[]} - 排序后的数组*/
function cocktailSort(arr) {let left = 0; // 初始化左边界let right = arr.length - 1; // 初始化右边界// 当左边界小于右边界时,继续排序while (left < right) {// 从左到右进行冒泡排序for (let i = left; i < right; i++) {if (arr[i] > arr[i + 1]) {// 交换相邻元素[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];}}// 将右边界左移一位right--;// 从右到左进行冒泡排序for (let i = right; i > left; i--) {if (arr[i] < arr[i - 1]) {// 交换相邻元素[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];}}// 将左边界右移一位left++;}return arr; // 返回排序后的数组
}// 示例
const arr = [5, 2, 9, 1, 5, 6];
const cocktailSortedArr = cocktailSort(arr);
console.log(cocktailSortedArr); // 输出: [1, 2, 5, 5, 6, 9]

五、总结

冒泡排序是一种简单直观的排序算法,通过相邻元素的比较和交换,使数据逐渐有序。虽然其效率较低,但通过优化和扩展,可以在某些场景下提高性能。理解和掌握冒泡排序有助于学习和理解更复杂的排序算法。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【香橙派 AIpro测评:探索高效图片分类项目实战】

前言 最近入手了一块香橙派 AIpro开发板&#xff0c;在使用中被它的强大深深震撼&#xff0c;有感而发写下这篇文章。 本文旨在深入探讨OrangePi AIpro的各项性能&#xff0c;从硬件配置、软件兼容性到实际应用案例&#xff0c;全方位解析这款设备如何在开源社区中脱颖而出&am…

案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造

近日&#xff0c;人大金仓支撑山西涉企政策服务平台、政务服务热线联动平台、政务网、办件中心等近30个政务核心系统完成全栈国产化升级改造&#xff0c;推进全省通办、跨省通办、综合业务受理、智能审批、一件事一次办等业务的数字化办结进程&#xff0c;为我国数字政务服务提…

数据结构(Java):LinkedList集合Stack集合

1、集合类LinkedList 1.1 什么是LinkedList LinkedList的底层是一个双向链表的结构&#xff08;故不支持随机访问&#xff09;&#xff1a; 在LinkedList中&#xff0c;定义了first和last&#xff0c;分别指向链表的首节点和尾结点。 每个节点中有一个成员用来存储数据&…

构建高效智能标准化仓库

在快节奏的现代商业环境中&#xff0c;仓库作为供应链的核心枢纽&#xff0c;其运营效率与管理水平直接影响着企业的整体竞争力。一个“高效智能标准化的仓库”&#xff0c;不仅是货物有序存储的空间&#xff0c;更是降本增效、提升客户满意度的关键所在。 在传统工厂管理模式下…

AI Agent 开发综合指南

本文介绍了 ReAct 模式以改进功能&#xff0c;并演示了如何从头开始创建 AI 代理。它涵盖了测试、调试和优化 AI 代理&#xff0c;以及工具、库、环境设置和实施。本教程为用户提供了创建有效 AI 代理所需的技能&#xff0c;无论他们是开发人员还是爱好者。 NSDT工具推荐&#…

【Linux】01.Linux 的常见指令

1. ls 指令 语法&#xff1a;ls [选项] [目录名或文件名] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息 常用选项&#xff1a; -a&#xff1a;列出当前目录下的所有文件&#xff0c;包含隐藏文件…

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

我在2021年底开始使用Polars和DuckDB。我立刻意识到这些库很快就会成为数据科学生态系统的核心。自那时起&#xff0c;这些库的受欢迎程度呈指数级增长。 在这篇文章中&#xff0c;我做出了一些关于未来几年数据科学领域的发展方向和原因的预测。 这篇文章旨在检验我的预测能力…

开始Linux之路

人生得一知己足矣&#xff0c;斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

记录自己Ubuntu加Nvidia驱动从入门到入土的一天

前言 记录一下自己这波澜壮阔的一天&#xff0c;遇到了很多问题&#xff0c;解决了很多问题&#xff0c;但是还有很多问题&#xff0c;终于在晚上的零点彻底放弃&#xff0c;重启windows。 安装乌班图 1.安装虚拟机 我开始什么操作系统的基础都没有&#xff0c;网上随便搜了…

JDBC基础 -获取连接的方式、结果集、批处理、事务处理、连接池、Apache-DBUtils

文章目录 概述快速入门(增删改)获取数据库的五种方式方式一&#xff1a;获取Driver实现类对象方式二&#xff1a;反射方式三&#xff1a;使用DriverManager代替Driver方式四&#xff1a;Class.forName自动完成注册驱动&#xff08;推荐&#xff09;方式五&#xff1a;使用prope…

请你谈谈:BeanDefinition类作为Spring Bean的建模对象,与BeanFactoryPostProcessor之间的羁绊

那么&#xff0c;我们如何理解Spring Bean的建模对象呢&#xff1f;简而言之&#xff0c;它是指用于描述和配置Bean实例化过程的模型对象。有人可能会提出疑问&#xff0c;既然只需要Class&#xff08;类&#xff09;就可以实例化一个对象&#xff0c;Class作为类的元数据&…

springboot websocket 知识点汇总

以下是一个详细全面的 Spring Boot 使用 WebSocket 的知识点汇总 1. 配置 WebSocket 添加依赖 进入maven官网, 搜索spring-boot-starter-websocket&#xff0c;选择版本, 然后把依赖复制到pom.xml的dependencies标签中 配置 WebSocket 创建一个配置类 WebSocketConfig&…

mysql不初始化升级

1、下载mysql&#xff0c;下载地址&#xff1a;MySQL :: Download MySQL Community Server 2、解压下载好的mysql&#xff0c;修改配置文件的datadir指定目录为当前数据存储的目录 3、通过管理员cmd进入新版本mysql的bin目录&#xff0c; 然后执行命令安装mysql服务&#xff…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(七)-通过无人机实现无线接入的独立部署

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

JVM:垃圾回收器

文章目录 一、介绍二、年轻代-Serial垃圾回收器三、老年代-SerialOld垃圾回收器四、年轻代-ParNew垃圾回收器五、老年代-CMS&#xff08;Concurrent Mark Sweep&#xff09;垃圾回收器六、年轻代-Parllel Scavenge垃圾回收器七、Parallel Old垃圾回收器八、G1垃圾回收器 一、介…

仅在少数市场发售?三星Galaxy Z Fold 6 Slim折叠屏手机更轻更薄

在智能手机的创新之路上&#xff0c;三星一直是行业的领跑者之一。随着Galaxy Z Fold系列的不断进化&#xff0c;三星再次突破技术边界&#xff0c;推出了更为轻薄的Galaxy Z Fold 6 Slim。 这款新型折叠屏手机以其独特的设计和卓越的性能&#xff0c;为用户带来了全新的使用体…

护眼台灯真的护眼吗?要注意学生如何正确使用台灯!

孩子们面临着越来越多的视力挑战&#xff0c;在近视学生中&#xff0c;近10%为高度近视&#xff0c;且占比随年级升高而增长。幼儿园6岁儿童中有1.5%为高度近视&#xff0c;而高中阶段则达到了17.6%。青少年是国家的未来和希望&#xff0c;而他们的视力健康却面临着前所未有的挑…

一篇讲清楚怎么选算力租赁平台

选择算力租赁平台时&#xff0c;需要考虑多个因素以确保找到最适合自己需求的服务。以下是一些关键点&#xff0c;可以帮助您做出明智的选择&#xff1a; 明确需求&#xff1a;首先&#xff0c;确定您的项目需要哪种类型的计算资源&#xff0c;比如CPU、GPU或FPGA&#xff0c;以…

Cadence23学习笔记(二)

原理图设计界面中就可以直接新建PCB: 亲测&#xff1a;需要画完原理图&#xff0c;并且DRC通过之后才可以&#xff01; 放置完元器件之后要规定元件的Footprint &#xff0c;注意PCB封装名要和库文件中的名字对应&#xff1a; DRC按钮&#xff1a; 点击图标 N, 生成第一网表&…

车载音视频MediaPlayer优化方案

媒体播放现状 从手机到车载&#xff0c;在很多地方还是有很大的不同。针对多媒体的场景Android车机目前大部分结构大致结构如下图&#xff1a; 从以上图看出的问题&#xff1a; 各个音视频APP单独实现播控界面&#xff0c;播放链路不一致&#xff0c;使用的底层播放器和音频焦…