笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程

概念

本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列

特性

复杂度分析

  • 时间复杂度:

    • 最好情况:O(n)
    • 最坏情况:O(n^2)
    • 平均情况:O(n^2)
  • 空间复杂度:O(1),原地排序

使用场景

因为时间复杂度为 O(n^2)

  • 适用于数据规模较小的时候
  • 不适用于大规模数据的排序

具体代码

算法代码


// 可以直接导入下方提供的算法测试工具函数,函数内部提供模拟数据,非常方便的测试算法
import { testSort } from './utils'; /**
- @desc : 冒泡排序实现
*/
function bubbleSort(arr: number[]): number[] {
const n = arr.length; // 外层遍历,数组内一共有多少个数据需要遍历
for (let i = 0; i < n; i++) {
// 是否交换
let swapped = false; // 内层遍历,数组中每个元素分别需要遍历多少次,当一个到达尾部后,下一个遍历次数需 - 1
for (let j = 0; j < n - 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;
} // 此处可以直接使用 utils 提供的测试函数进行算法测试
testSort(bubbleSort); // 算法测试
let arr = [10, 90, 20, 100, 50];
console.log('排序前:', arr); // [10, 90, 20, 100, 50] let newArr = bubbleSort(arr);
console.log('排序后:', newArr); // [10, 20, 50, 90, 100]

util 工具函数



/**
- @desc : 判断排序是升序
- @param {number} arr:数组
- @return {any} 是否升序
*/
function isSort(arr: number[]): boolean {
for (let i = 0; i < arr.length; i++) {
// 只有有一个不是升序,则返回 false
if (arr[i] > arr[i + 1]) {
return false;
}
} return true;
} /**
- @desc : 测试排序的功能
- @param {any} sortFn:排序函数
*/
export function testSort(sortFn: Function) {
// 构造随机测试的假数据
let arr = new Array(10);
const n = arr.length; for (let i = 0; i < n; i++) {
arr[i] = Math.floor(Math.random() * 500);
} console.log('排序前:', arr); let newArr = sortFn(arr);
console.log('排序后:', newArr); console.log('排序是否成功?', isSort(newArr));
}

冒泡排序的基本实现【数据结构与算法—TypeScript 实现】的更多相关文章

  1. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  2. [py]数据结构和算法-冒泡排序

    用Python实现的数据结构与算法 数据结构和算法可以培养一个人的逻辑思维(推荐几本书) 逻辑思维培养 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分) 大话数据结构 数据结构与算法分析 ...

  3. 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述

    定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据 ...

  4. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  5. 数据结构和算法(Golang实现)(19)排序算法-冒泡排序

    冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单. 冒泡排序属于交换类的排序算法. 一.算法介绍 现在有一堆乱序的数,比如:5 9 ...

  6. 数据结构与算法 Big O 备忘录与现实

    不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新.        算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...

  7. php数据结构与算法

    php面试题之二--数据结构和算法(高级部分) 二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator ...

  8. 《数据结构与算法JavaScript描述》

    <数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...

  9. php面试题之二——数据结构和算法(高级部分)

    二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...

  10. 面试常考的常用数据结构与算法(zz)

    数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易.在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结 ...

随机推荐

  1. 【Azure Fabric Service】Service Fabric 托管群集通过 Connect-ServiceFabricCluster 连接时候报错 CertificatedNotMatched

    问题描述 Service Fabric 托管群集, 使用Key Vault中证书,把证书导入到本地安装后,使用该证书的 Thumbprint 作为指令 Connect-ServiceFabricClu ...

  2. 开源短信项目 platform-sms 发布了新版本 0.5.0

    Github : https://github.com/makemyownlife/platform-sms 短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进. ...

  3. Java -----多线程 创建线程的方式三: 实现Callable接口----JDK 5.0 新增

    1 package bytezero.thread2; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent. ...

  4. jenkins 上传文件参数

    注意:文件参数不支持Jenkins流水线 文件上传以后会上传至 workspace 里对应的project下面,但是文件会被重命名为File location(设置路径)输入库的值, 如果在jenki ...

  5. 使用@RequestBody注解踩的坑

    一.问题由来 最近在和前端调试一个自己写的接口时,频频出现问题,让我很是烦恼.因此写下这篇博文来记录开发中遇到的一些问题.第一个问题是 前端页面传递参数后,后台不能正常接收参数.我写好接口以后,通过s ...

  6. .gvfs 文件夹 异常

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. NJUPT自控第一次积分赛的小总结(二)基于simpleFOC的无刷电机控制

    新人一枚,写的比较水,欢迎大佬指正! 先说一下我用的物料与开发环境吧: 无刷电机:makerbase的2804电机(带AS5600磁编码器) 电机驱动板:simpleFOCmini(学校推荐的) 电池 ...

  8. WebView库功能完善

    目录介绍 01.loadUrl到底做了什么 02.触发加载网页的行为 03.webView重定向怎么办 04.js交互的一点知识分享 05.拦截缓存如何优雅处理 06.关于一些问题和优化 07.关于一 ...

  9. 记录--Vue3问题:如何实现组件拖拽实时预览功能?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 需求分析 实现一个CMS内容管理系统,在后台进行内容编辑,在官网更新展示内容. 关于后台的编辑功能,大致分为两部分:组件拖拽预览.组 ...

  10. 记录-JS简单实现购物车图片局部放大预览效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.实现效果 二.代码实现 代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG  ...