当前位置: 首页 > article >正文

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

文章目录

  • 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.kler.cn/news/327187.html

相关文章:

  • 海陆钻井自动化作业机器人比例阀放大器
  • Apache Solr:深入探索与常见误区解析
  • 深度学习实战:UNet模型的训练与测试详解
  • 关于 JVM 个人 NOTE
  • ARM Assembly: 第8课 branching
  • Web自动化中常用XPath定位方式
  • D23【 python 接口自动化学习】- python 基础之判断与循环
  • Docker入门指南:快速学习Docker的基本操作
  • 网络编程(13)——单例模式
  • BCJR算法——卷积码的最大后验译码
  • Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等
  • 联邦学习(三只决策和大数据分析)(学习笔记)
  • 【网络安全】TCP和UDP
  • 防止电脑电池老化,禁止usb或者ac接口调试时充电
  • 计算神经学笔记01
  • 后端-对表格数据进行添加、删除和修改
  • 单片机的原理及应用
  • 2024年华为OD机试真题-找终点-Java-OD统一考试(E卷)
  • AIGC学习笔记—minimind详解+训练+推理
  • elasticsearch单个node节点写入数据
  • 中间层架构设计:构建稳健的企业级服务
  • [Day 81] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 表现层架构设计:打造高效、可维护的前端系统
  • JavaScript网页设计案例深度解析:从理论到实践
  • frps+nginx实现访问ip的记录
  • 测试用例_边界值介绍(需求自动化生成用例方法论)
  • 预训练技巧:在训练末尾对领域数据上采样
  • Linux shell脚本set -e的作用详解
  • Linux 性能优化之CPU 多级缓存
  • ip的生命周期是多久