TypeScript 算法手册 - 【冒泡排序】

news2024/12/25 14:57:53

文章目录

  • TypeScript 算法手册 - 冒泡排序
    • 1. 冒泡排序简介
      • 1.1 冒泡排序定义
      • 1.2 冒泡排序特点
    • 2. 冒泡排序步骤过程拆解
      • 2.1 比较相邻元素
      • 2.2 交换元素
      • 2.3 重复过程
    • 3. 冒泡排序的优化
      • 3.1 提前退出
      • 3.2 记录最后交换位置
      • 案例代码和动态图
    • 4. 冒泡排序的优点
    • 5. 冒泡排序的缺点
    • 总结

在这里插入图片描述

【 已更新完 TypeScript 设计模式 专栏,感兴趣可以关注一下,一起学习交流🔥🔥🔥 】

TypeScript 算法手册 - 冒泡排序

1. 冒泡排序简介

1.1 冒泡排序定义

冒泡排序是一种简单的排序算法,重复地遍历要排序的数列,一次比较两个元素,他们的顺序错误就把他们交换过来。这个过程就像水底的气泡一样从底部向上"冒泡"到水面,这也是冒泡排序名字的由来。

用 TypeScript 代码表示一个简单的冒泡排序:

function bubbleSort(arr: number[]): number[] {
  const len = arr.length;
  for (let i = 0; i < len - 1; 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;
}

1.2 冒泡排序特点

  1. 简单直观: 冒泡排序是最简单的排序算法之一
  2. 稳定性: 冒泡排序是一种稳定的排序算法
  3. 原地排序: 冒泡排序是原地排序算法,不需要额外的存储空间

2. 冒泡排序步骤过程拆解

2.1 比较相邻元素

// 交换元素
if (arr[j] > arr[j + 1]) {
}

2.2 交换元素

// 交换元素
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];

2.3 重复过程

// 比较和交换
for (let i = 0; i < len - 1; i++) {
  for (let j = 0; j < len - 1 - i; j++) {}
}

3. 冒泡排序的优化

3.1 提前退出

// 提前退出
function bubbleSortOptimized(arr: number[]): number[] {
  const len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    let 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;
}

3.2 记录最后交换位置

// 记录最后交换位置
function bubbleSortFurther(arr: number[]): number[] {
  let lastExchangeIndex = 0;
  let sortBorder = arr.length - 1;
  for (let i = 0; i < arr.length - 1; i++) {
    let isSorted = true;
    for (let j = 0; j < sortBorder; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        isSorted = false;
        lastExchangeIndex = j;
      }
    }
    sortBorder = lastExchangeIndex;
    if (isSorted) break;
  }
  return arr;
}

案例代码和动态图

const array = [29, 10, 14, 66, 37, 14];
const sortedArray = bubbleSort(array);
console.log(sortedArray); // [10, 14, 14, 29, 37, 66]

在这里插入图片描述

4. 冒泡排序的优点

  1. 代码简单,容易理解
  2. 稳定排序
  3. 原地排序,不需要额外空间

5. 冒泡排序的缺点

  1. 时间复杂度较高,为 O(n^2)
  2. 交换次数过多

总结

冒泡排序是一种简单直观的排序算法,虽然效率不高,但是在处理小规模数据或者基本有序的数据时还是很有用的。理解冒泡排序的原理对于学习更复杂的排序算法也很有帮助。

喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!

下期预告: TypeScript 算法手册 - 选择排序

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

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

相关文章

UEFI EDK2框架学习(三)——protocol

一、Protocol协议 搜索支持特定Protocol的设备&#xff0c;获取其Handle gBS->LocateHandleBuffer 将内存中的Driver绑定到给定的ControllerHandle gBS->OpenProtocol 二、代码实现 Protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #includ…

cmd发邮件:Windows命令行发送邮件的教程!

cmd发邮件怎么通过命令行实现&#xff1f;如何使用CMD发送邮件&#xff1f; 通过cmd发邮件&#xff0c;你可以在不打开任何邮件客户端的情况下&#xff0c;直接从命令行发送邮件。AokSend将详细介绍如何使用cmd发邮件功能&#xff0c;让你轻松掌握这一实用技能。 cmd发邮件&a…

信息收集---WAF指纹识别

1. 什么是waf web应用防火墙&#xff0c;一款集网站内容安全防护、网站资源安全防护及流量保护功能为一体的服务器工具。为用户提供实时网站安全防护&#xff0c;避免各类针对网站的攻击带来的危害。&#xff08;核心其实也是基于规则的防御&#xff09;| 任何工具&#xff08…

解决 Could not locate zlibwapi.dll. Please make sure it is in your library path

zlibwapi.dll文件是zlib库的Windows版本&#xff0c;很多Python上的库想要在Windows上执行都需要依赖这个文件。 可以通过本人上传的免费资源直接下载&#xff1a;zlibwapi 链接&#xff1a;https://pan.baidu.com/s/1u8osbt_IevO4GOkXthZ04A 提取码&#xff1a;c2mf zlibwa…

8 时间序列相关工具介绍

1 背景 发现最近做的任务都是有关于时间序列任务的&#xff0c;做的方法全部偏向于如何对数据进行清洗、提取周期特征然后构造相关特征&#xff0c;这些工作都是比较偏向于传统时间序列模型的方案。 现在深度学习这个火&#xff0c;比如循环神经网络分支&#xff1a;L…

Typora 下载安装

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-adAnH 演示环境 操作系统&#xff1a;windows10 产品&#xff1a;typora 版本&#xff1a; 1.9.5 注意&#xff1a;如果需要其他版本可自行下载。 安装步骤 1、解压。 2、双击 "typora-setup-x64.…

基于SpringBoot+Vue的社区智慧消防管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…

国庆出行新伴侣:骨传导耳机分享,开启安全无忧的音乐旅行

随着国庆长假的脚步渐近&#xff0c;许多朋友已经开始规划自己的出游行程。无论是短途旅行还是长途跋涉&#xff0c;一款合适的耳机无疑是旅途中的良伴&#xff0c;特别是在户外活动频繁的假期&#xff0c;骨传导耳机因其独特的优点而成为了众多旅行者的首选。骨传导技术通过振…

心理咨询行业为何要有自己的知识付费小程序平台 心理咨询小程序搭建 集师saas知识付费小程序平台搭建

在快节奏的现代生活中&#xff0c;心理健康问题日益凸显&#xff0c;心理咨询行业迎来了前所未有的发展机遇。然而&#xff0c;传统咨询模式受限于地域、时间等因素&#xff0c;难以满足日益增长的多元化需求。在此背景下&#xff0c;搭建自己的知识付费小程序&#xff0c;成为…

python UNIT 3 选择与循环(2)

目录 1。循环的优化 经典优化分析&#xff1a; 未优化的代码&#xff1a; 细节分析&#xff1a; 优化后的代码&#xff1a; 优化的细节&#xff1a; 性能对比 优化的关键在于&#xff1a; 经典习题讲解&#xff1a;(紫色的解析请重点关注一下) 1。例三 个人代码解析…

Python发送邮件附件全攻略:从设置到发送!

Python发送邮件附件的详细步骤&#xff1f;如何利用Python发信&#xff1f; Python作为一种强大的编程语言&#xff0c;提供了丰富的库来帮助我们自动化这一过程。AokSend将详细介绍如何使用Python发送邮件附件&#xff0c;从基础设置到实际发送&#xff0c;带你一步步掌握这一…

【计算机网络】数据链路层理解

文章目录 一、引言二、MAC地址三、以太网四、交换机五、ARP与RARP1、ARP2、RARP 一、引言 数据链路&#xff0c;有时也指以太网、无线局域网等通信手段。数据链路层的协议定义了通过通信媒介互联的设备之间传输的规定。通信媒介包括双绞线电缆、同轴电缆、光纤、点播以及红外线…

值得去公司(完整榜单)

值得去公司 近日&#xff0c;脉脉出了一份《职得去公司》榜单&#xff1a; 前三名是 TAM&#xff08;老牌巨头百度日常掉队&#xff09;。 大家肯定好奇这个榜单怎么统计出来的。 这上面写的是根据「雇主指数」进行排名&#xff0c;广义的雇主指数包括了多个维度&#xff0c;包…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)

作为“贴代码”力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服&#xff01;下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里可以下载这个PasteForm的项目案例 目前“贴代码”对外使用PasteForm的项目有"贴Builder(PasteSpide…

Redis: 主从复制读写分离环境搭建

概述 Redis 的单机模式实际上就是在一个服务器上装了一个单节点的Redis通过简单的配置和简单的命令启动起来就可以使用这种搭建环境&#xff0c;不保证高可用的情况下&#xff0c;完全没有问题如果说你的项目必须要具备高可用&#xff0c;而且 Redis 也要提供更高的性能这个单…

java项目实现钉钉异常告警实时监控

最近有个小伙伴问我&#xff0c;我们的项目核心业务的地方总是有异常&#xff0c;虽然有打印日志&#xff0c;但不能立马通知我&#xff1b;所以今天我就教大家如何实现异常报警实时提醒 1.需要有钉钉 自己新建的企业用户 2.建一个群&#xff0c;需要有三人以上&#xff1b;…

yolov8/9/10模型在仪表盘、指针表检测中的应用【代码+数据集+python环境+训练/应用GUI系统】

可视化训练系统 可视化应用系统 yolov8/9/10模型在仪表盘、指针表检测中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 随着科学技术的快速发展&#xff0c;机器视觉以及人工智能等技术逐渐从理论走向实践&#xff0c;并在各个领域得到广泛应用。机器视觉检测系统…

TCP CUBIC 曲线对 BIC 折线的拟合

bic 旨在对 reno 改进&#xff0c;用二分逼近替换线性遍历逼近&#xff0c;时间规模从 O ( W m a x ) O(W_{max}) O(Wmax​) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax​)&#xff0c;这是本质&#xff0c;而 cubic 可以看作对 bic 的 bugfix&#xff0c;解除了…

新书速览|MySQL 9从入门到性能优化:视频教学版

《MySQL 9从入门到性能优化:视频教学版》 本书内容 MySQL是流行的关系数据库管理系统之一&#xff0c;由于其体积小、速度快、总体拥有成本低、开放源码等特点&#xff0c;一般中小型企业甚至大型互联网企业的应用开发都选择MySQL作为数据库。《MySQL 9从入门到性能优化:视频教…