【数据结构学习笔记】冒泡排序

【数据结构学习笔记】冒泡排序

参考电子书:排序算法精讲

算法原理

对未排序的元素进行多次遍历,每次遍历都将相邻的两个元素进行比较,如果它们的顺序错误就交换它们的位置。在每一轮遍历后,最大的元素会被冒泡到序列的末端。这个过程会一直重复,直到没有需要交换的元素为止,此时序列已经排好序

const nums = [2, 5, 7, 4, 1];for (let i = 0; i < nums.length; i++) {for (let j = 0; j < nums.length - i - 1; j++) {if (data[j] > data[j + 1]) {const temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;}}
}
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

优化方式

  • 当 i 为 nums.length - 1 时,nums.length - 1 - i 为 0,可以直接跳过此轮
const nums = [2, 5, 7, 4, 1];for (let i = 0; i < nums.length - 1; i++) {for (let j = 0; j < nums.length - i - 1; j++) {if (data[j] > data[j + 1]) {const temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;}}
}
  • 如果某一轮没有发送交换,那么后续也不会发生交换,数组已经有序
const nums = [2, 5, 7, 4, 1];for (let i = 0; i < nums.length - 1; i++) {let swapped = false;for (let j = 0; j < nums.length - i - 1; j++) {if (data[j] > data[j + 1]) {const temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;swapped = true;}}if (!swapped) break;
}
  • 记录当前轮次最后一次发生交换的位置,后面的序列是有序的,可以跳过
const nums = [2, 5, 7, 4, 1];let swapped;
let swappedIndex = - 1;
let indexOfLastUnsortedElement = arr.length - 1;
for (let i = 0; i < nums.length - 1; i++) {swapped = false;for (let j = 0; j < indexOfLastUnsortedElement; j++) {if (data[j] > data[j + 1]) {const temp = data[j];data[j] = data[j + 1];data[j + 1] = temp;swapped = true;swappedIndex = j;}}if (!swapped) break;indexOfLastUnsortedElement = swappedIndex;
}

相关例题

LC 283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意,必须在不复制数组的情况下原地对数组进行操作。

/*** @param {number[][]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var moveZeroes = function(nums) {let swapped;for (let i = 0; i < nums.length - 1; i++) {swapped = false;for (let j = 0; j < nums.length - i - 1; j++) {if (nums[j] === 0) {const temp = nums[j + 1];nums[j + 1] = nums[j];nums[j] = temp;swapped = true;}}if (!swapped) break;}
}

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

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

相关文章

【Docker】容器的生态系统

Docker提供了一整套技术支持&#xff0c;包括核心技术、平台技术、支持技术。 核心技术 容器核心技术是指能让Container&#xff08;容器&#xff09;在host&#xff08;集群、主机&#xff09;上运行起来的那些技术。 1&#xff09;容器规范&#xff1a;OCI&#xff08;runt…

【Java】读取手机文件名称

首先&#xff0c;确保你已经连接了你的手机并已启用 USB 调试模式。然后&#xff0c;你需要使用 Android Debug Bridge&#xff08;ADB&#xff09;工具来获取手机文件列表。以下是一个简单的 Java 代码片段&#xff0c;使用 ProcessBuilder 调用 ADB 命令来获取文件列表&#…

InnoDB和MyISAM存储引擎

InnoDB mysql默认存储引擎 支持事务&#xff0c;行级锁&#xff08;并发量大&#xff09;&#xff0c;外键约束&#xff0c;容量大&#xff0c;支持缓存&#xff0c;支撑主键自增&#xff0c; 全文检索&#xff0c;不存储表的总行数&#xff0c;需要sql逐行统计 MyISAM 不…

QString的参数传递

在 Qt 框架中,QString 是一个非常常用的类,用于处理字符串。当涉及到 QString 的参数传递时,通常需要考虑以下几点: 按值传递 (Pass by Value): 当你将一个 QString 对象作为参数传递给一个函数时,你可以直接传递它的值。这种情况下,函数会接收这个 QString 的一个副本。…

沙发3d模型制作过程---模大狮模型网

制作沙发的3D模型通常需要经历以下步骤&#xff1a; 概念设计&#xff1a; 首先&#xff0c;根据设计师或客户的需求&#xff0c;进行概念设计。这包括通过手绘草图或数字绘图软件创建初始设计概念。 建模&#xff1a; 使用专业的3D建模软件(例如Blender、Maya、3ds Max)进行建…

ATFX汇市:美国2月CPI数据来袭,高通胀问题或进一步缓解

ATFX汇市&#xff1a;今日20:30&#xff0c;美国劳工部将公布2月未季调核心CPI年率数据&#xff0c;前值为3.9%&#xff0c;预期值3.7%&#xff0c;预期将下降0.2个百分点。历史数据看&#xff0c;美国核心CPI年率处于快速下降状态&#xff0c;去年3月份数据仍高达5.6%&#xf…

CSS 用 flex 布局绘制骰子

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box {height: 100px;width: 100px;border: 2px solid grey;border-radius: 10px;display: flex;justify-content: center; // 水平居中/* alig…

[论文笔记] ICLR 2022 | 减少跨语言表示差异,字节跳动AI Lab通过流形混合增强跨语言迁移

论文地址:https://openreview.net/pdf?id=OjPmfr9GkVv代码地址:https://github.com/yhy1117/X-Mixup 字节跳动人工智能实验室和加利福尼亚大学圣塔芭芭拉分校的研究者提出了 跨语言流形混合(X-Mixup)方法为目标语言提供 “折衷” 的表示,让模型自适应地校准表示差…

LLM(大语言模型)常用评测指标-MAP@R

MAPR (Mean Average Precision at R) 是一种用于评估信息检索系统或排序模型效果的评价指标。它特别适用于那些返回一组相关结果的情况&#xff0c;例如搜索引擎或推荐系统。这里的“R”代表返回的相关结果的数量。MAPR 考虑了结果的排名和相关性两个因素。 计算方法 计算平…

基础小白快速入门web前端开发技术------->hbuilder的下载安装以及简易的网页最开始制作

工欲善其事&#xff0c;必先利其器&#xff0c; 在我们学习开发网页设计&#xff0c;我们首先需要一个良好的开发工具 这里我比较推荐hbuilder这个 只需要进入官网傻瓜下载&#xff0c;傻瓜安装 https://dcloud.io/ 点击hbuilder选择版本进行下载安装即可 hbuilder的新建文件…

01 THU大模型之基础入门

1. NLP Basics Distributed Word Representation词表示 Word representation: a process that transform the symbols to the machine understandable meanings 1.1 How to represent the meaning so that the machine can understand Compute word similarity 计算词相似度 …

高级语言讲义2018软专(仅高级语言部分)

1.编写程序输入任意一个正整数n&#xff0c;,输出由组成的最大正整数。例如输入3846,则输出8643. #include <stdio.h>void sort(int *arr,int m,int n) {for(int im; i<n-1; i)for(int jm; j<nm-i; j)if(arr[j]<arr[j1]) {int temparr[j];arr[j]arr[j1];arr[j1…

【计算机网络实践】FileZilla Server1.8.1实现局域网ftp文件传输

大二新生随便写写笔记&#xff0c;轻喷&#xff0c;鉴于本人在网络搜索中并未搜索到1.8.1版本的使用方法&#xff0c;因而瞎写一页。 一、准备 下载一个FileZilla Server1.8.1在你想作为服务器的主机上&#xff08;此处直接在官网下载即可&#xff1a;Download FileZilla Serve…

收下这份实操案例,还怕不会用Jmeter接口测试工具

一、简介 JMeter&#xff0c;一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是接口功能、自动化、性 能测试的工具。具有高可扩展性、支持HTTP、HTTPS、TCP、等多种协议&#xff0c;还可以自己编写Java脚本对 协议进行扩展。 官…

Seatunnel系列之:Apache Iceberg sink connector和往Iceberg同步数据任务示例

Seatunnel系列之:Apache Iceberg sink connector和往Iceberg同步数据任务示例 一、支持的Iceberg版本二、支持的引擎三、描述四、支持的数据源信息五、数据库依赖六、数据类型映射七、Sink选项八、往Iceberg同步数据任务示例一、支持的Iceberg版本 1.4.2二、支持的引擎 SparkF…

力扣● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

● 1143.最长公共子序列 1.dp数组含义。 dp[i][j]&#xff1a;数组1[0,i-1]范围的子数组和数组2[0,j-1]的子数组的公共子序列最长长度。注意这里不需要一定以A[i-1]/B[j-1]结尾&#xff0c;原因在下面有说明。 动态规划求子序列的问题&#xff0c;一般都是dp的下标相对于数组…

Java Web实战(三)Web后端之MySQL语法使用详解-01

目录 MySQL数据模型SQL 分类DDL(Data Definition Language)databasetable DML(Data Manipulation Language)DQL (Data Query Language)条件查询统计分组、排序、分页 案例&#xff1a;根据页面原型分析需求完成员工信息查询 MySQL数据模型 database table record SQL 分类 简…

DAMA考试知识点

数据管理的定义: 数据管理是为了交付、控制、保护并提升数据和信息资产的价值&#xff0c;在其整个生命周期中制定计划、制度、规程和实践活动&#xff0c;并执行和监督的过程。 数据管理专业人员的定义: 是指从事数据管理各方面的工作(从数据全生命周期的技术管理工作&#x…

【科研必备教程】ChatGPT、气象、生态、遥感、水文、洪水、语言、地质、AI人工智能等领域模型应用

针对ChatGPT、遥感、ArcGIS、无人机、水文模型、大气科学、生态系统模型、地下水土壤、数据语言、生物信息、AI人工智能、碳排放等科研领域教程。 ChatGPT专栏1最新ChatGPT支持下的PyTorch机器学习与深度学习实践技术应用2基于ChatGPT4Python近红外光谱数据分析及机器学习与深…

智海Mo 平台与 Datawhale 携手浙江大学,共襄 AI+X 高校行!

2024年3月9日&#xff0c;一场以"AIX 高校行"为主题的活动在浙江大学成功举办。本次活动由 Datawhale 与杭州市人工智能学会主办&#xff0c;浙江大学人工智能研究所、浙江大学控制科学与工程学院联合主办&#xff0c;浙江大学学生人工智能协会承办&#xff0c;趋动云…