一、冒泡排序

// 冒泡排序var bubbleSort = function (arr) {const len = arr.length;for (let i = 0; i < len; i++) {let isSwap = false;for (let j = 0; j < len - 1; j++) {// 每一次遍历都要比较相邻元素的大小,如果满足条件就交换位置if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];isSwap = true;}}// 如果遍历完数组后没有发生交换,说明已经排序好了,跳出循环,中断剩余操作if (!isSwap) {break;}}return arr;
}console.log(bubbleSort([7, 3, 2, 21, 12, 1, 4, 9, 10]));

二、选择排序

// 选择排序var selectionSort = function (arr) {const len = arr.length;// 外循环的 i 指向需要替换的位置,而 i 之前是已经排序的数组for (let i = 0; i < len - 1; i++) {let minIndex = i;// 内循环是在未排序好的数组中找最小值的索引for (let j = i + 1; j < len; j++) {if (arr[minIndex] > arr[j]) {minIndex = j;}}// 找到最小值的索引后交换位置即可[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];}return arr;
}console.log(selectionSort([7, 3, 2, 21, 12, 1, 4, 9, 10]));

三、插入排序

// 插入排序var insertionSort = function (arr) {const len = arr.length;for (let i = 1; i < len; i++) {base = arr[i]; // 将未排序数组中的第一个元素作为基数let j = i - 1; // j 指向已排序好的数组的最后一个元素while (j >= 0 && arr[j] > base) {arr[j + 1] = arr[j]; // 如果以上满足条件,元素 arr[j] 后移一位j--; // 向前遍历}// 因为 j 在最后一次循环中减了一次,此时 j + 1 之后的元素都小于 base,所以 base 要插入的正确的位置是 j + 1arr[j + 1] = base;}return arr;
}console.log(insertionSort([7, 3, 2, 21, 12, 1, 4, 9, 10]));

四、快速排序

// 快速排序 O(n log n)// 分治
var partition = function (arr, left, right) {let i = left, j = right;let base = arr[left]; // 每次将 arr[left] 作为基数while (i < j) {// 在右边数组找比基数小的数的索引while (i < j && arr[j] >= base) {j--;}while (i < j && arr[i] <= base) {i++;}// 交换位置[arr[i], arr[j]] = [arr[j], arr[i]];}// 此时 i 索引指向的就是基数应该处于的位置[arr[i], arr[left]] = [arr[left], arr[i]];console.log("arr:", arr);return i;
}// 递归
var quickSort = function (arr, left, right) {// 递归终止条件if (left >= right) {return;}// 递归操作// 找到基数所在的索引作为中间支点let pivot = partition(arr, left, right);// 左递归quickSort(arr, left, pivot - 1);// 右递归quickSort(arr, pivot + 1, right);
}
let arr = [7, 3, 2, 21, 12, 1, 4, 9, 10, 31, 64, 108, 13, 5];
let len = arr.length - 1;
quickSort(arr, 0, len);

五、归并排序

// 归并排序var mergeSort = function (arr) {// 递归终止条件if (arr.length <= 1) {return arr;}// 递归操作const mid = arr.length / 2;// 拆分数组const leftArr = mergeSort(arr.slice(0, mid));const rightArr = mergeSort(arr.slice(mid));return merge(leftArr, rightArr);
}// 归并操作
var merge = function (leftArr, rightArr) {let left = 0, right = 0;let ans = [];// 按需归并while (left < leftArr.length && right < rightArr.length) {if (leftArr[left] <= rightArr[right]) {ans.push(leftArr[left]);left++;} else {ans.push(rightArr[right]);right++;}}// 剩余元素直接追加return ans.concat(leftArr.slice(left)).concat(rightArr.slice(right));
}// ======== 测试 ========
const arr = [7, 3, 2, 21, 12, 1, 4, 9, 10, 108, 24, 35, 5, 8, 124];
console.log('排序后:', mergeSort(arr));
console.log('原数组是否改变:', arr);  // 保持不变

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

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

相关文章

电子病历空缺句的语言学特征描述与自动分类探析(以GPT-5为例)(中)

语言学特征刻画(特征库) 句法特征 句法特征是识别 SYN 类电子病历空缺句的核心语言学维度,其量化分析通过构建依存句法结构的形式化指标,实现对语法不完整性的客观描述。该类特征主要包括依存树不完备指标、谓词-论元覆盖率及从属连词未闭合三类核心参数,共同构成 SYN 类…

InnoDB存储引擎-事务

1. 事务概述事务可由一条简单的SQL语句组成,也可以由一组复杂的SQL语句组成. 事务是访问并更新数据库中各种数据项的一个程序执行单元. 在事务中的操作, 要么都做修改, 要么都不做. 对于 InnoDB存储引擎而言, 其默认的事务隔离级别 RR , 完全遵循和满足了事务的 ACID 特性. 1.1…

web项目的目录结构

web项目的目录结构 WEB-INF 存放class文件、jar文件和配置文件&#xff0c;对于用户来说该文件夹是不可见的WEB-INF/web.xml web应用程序的描述文件&#xff0c;用来配置资源&#xff0c;如servlet、过滤器、监听器等WEB-INF/classes 用于存放class文件&#xff0c;也是该web应…

数据结构_队列Queue(C语言实现)

一、队列的基本概念 1.队列定义 队列是一种先进先出的线性表数据结构&#xff08;First in First out&#xff09;,现实中的例子就是&#xff0c;排队购票&#xff0c;先排队的先购票&#xff0c;购完票之后直接从这个队中离开&#xff0c;后来的在这个队后面排队&#xff0c;这…

C++对CPU缓存的合理利用

缓存体系 在计算机的体系结构中,存储速度是分了好几层: CPU缓存,又分成了L1/L2/L3等多层缓存,我们暂时看成同一层。访问速度最快 内存,访问速度次之,大概是CPU缓存的几十分之一 硬盘,访问速度最慢,是内存访问速度的几十分之一 所以,在计算机体系结构中,把下一层的数…

贝叶斯定理:理解概率更新与实际场景应用

贝叶斯定理及其应用&#xff1a;从基础到实战 贝叶斯定理&#xff08;Bayes’ Theorem&#xff09;是概率论中最基础也是最强大的工具之一。它通过将先验知识与新证据结合&#xff0c;能够帮助我们在不确定的情况下做出更加精准的判断。本文将从贝叶斯定理的核心概念、公式开始…

组件之间的传递参数传递(常用父向子传递)

现在&#xff0c;有子组件<MdsWxSourceDetailref"mdsWx":rank-obj"activeRankObj":media-name"activeObj.mediaName" :error-info"activeErrorInfo" ></MdsWxSourceDetail>以上代码在MdsIndexRankDetail&#xff0…

java毕业设计-基于springboot区块链的电子病历数据共享平台设计与实现(附源码数据库文档资料)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【新启航】3D 逆向抄数的三维能力架构:数据采集工具操作 × 几何处理算法应用 × 行业场景适配技能

摘要3D 逆向抄数的落地效果依赖多维度能力协同&#xff0c;本文提出 “数据采集工具操作 - 几何处理算法应用 - 行业场景适配技能” 的三维能力架构。通过拆解各维度核心要素&#xff0c;分析数据采集工具&#xff08;激光、结构光等&#xff09;的操作要点&#xff0c;解析几何…

RocksDB 在 macOS M 系列 上运行时报错的解决方案

问题现象 项目中引入可Kafka Stream &#xff0c;Windows下启动不报错 &#xff0c;但是在 macOS M系列 环境下就会报错&#xff0c;初步定位是使用 Java 项目调用 RocksDB 时&#xff0c;运行过程中出现以下报错&#xff1a; UnsatisfiedLinkError: no rocksdbjni in java.lib…

深度学习之第五课卷积神经网络 (CNN)如何训练自己的数据集(食物分类)

简介 之前一直使用的是现有人家的数据集&#xff0c;现在我们将使用自己的数据集进行训练。 基于卷积神经网络 (CNN) 的 MNIST 手写数字识别模型 一、训练自己数据集 1.数据预处理 我们现在有这样的数据集如下图&#xff1a; 每一个文件夹里面有着对应的图片。我们要将这些…

【Big Data】AI赋能的ClickHouse 2.0:从JIT编译到LLM查询优化,下一代OLAP引擎进化路径

目录 1. 什么是ClickHouse&#xff1f; 2. 诞生背景与发展历程 3. 架构设计解析 3.1 存储引擎&#xff1a;MergeTree家族 3.2 分布式模型&#xff1a;分片与副本 3.3 执行流程&#xff1a;向量化与并行计算 4. 解决的问题与适用场景 4.1 典型问题 4.2 适用场景 5. 关…

Vue实践篇-02,AI生成代码

问题描述这个是需求&#xff1a;动态表格、表格里边下拉框&#xff0c;弹框选择基础的列表&#xff0c;还行&#xff0c;这种真的是一时不知如何是好。打算晚上吃了饭找前端同事&#xff0c;帮忙看看。晚饭前&#xff0c;AI一下看看。结果&#xff0c;惊为天人&#xff01;&…

2025-08-28-zabbix5.0创建监控项通过脚本简单实现监控oracle11g的磁盘组和表空间的使用量

title: zabbix5.0创建监控项通过脚本简单实现监控oracle11g的磁盘组和表空间的使用量 authors: Loong date: 2025-08-28使用SQLPLUS配合crontab任务 用来执行sql获取信息的脚本 /home/oracle/zabbix_oracle_check.sh #!/bin/bash #用于zabbix agent被动模式的 非入侵性的检测 #…

MySQL-Redo Log(重做日志)

MySQL 的 Redo Log&#xff08;重做日志&#xff09;是 InnoDB 存储引擎的核心组件之一&#xff0c;是保证数据库持久性&#xff08;Durability&#xff09; 和崩溃恢复&#xff08;Crash Recovery&#xff09; 的关键机制。1. 什么是 Redo Log&#xff1f;它的核心作用是什么&…

嵌入式linux相机(2)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。本人将前几章的内容大致学完之后&#xff0c;考虑到后续驱动方面得更多的开始实操&#xff0c;后续的内容将以韦东山教程Linux项目的内容…

云计算学习100天-第34天 -zabbix监控2

SourceURL:file:///home/student/Documents/zabbix.doczabbix服务器配置1. 拷贝zabbix软件包到pubserver#在此之前先从真机拷贝安装包[rootserver1 ~]# scp /linux-soft/s2/zzg/zabbix_soft/*.rpm 192.168.88.5:/root/#然后拷贝到pubserver[rootzabbixserver ~]# scp /linux-so…

猫头虎AI分享:无需OCR,基于ColQwen2、Qwen2.5和Weaviate对PDF进行多模态RAG的解决方案

无需OCR&#xff0c;基于ColQwen2、Qwen2.5和Weaviate对PDF进行多模态RAG的解决方案 关键词&#xff1a;多模态RAG、ColQwen2、Qwen2.5-VL、Weaviate 向量数据库、PDF 检索问答、无需 OCR、ColBERT 多向量、跨模态检索、MaxSim 相似度、知识库构建、AI 文档处理、视觉语言模型、…

HTML第三课:特殊元素

HTML第三课&#xff1a;特殊元素特殊元素代码展示特殊元素 不在行级元素和块级元素概念里面的元素无法控制没有宽高的元素 代码展示 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewpo…

蓝桥杯算法之基础知识(5)

目录 Ⅰ.in方法的使用 Ⅱ.字典的使用 Ⅲ.1MB 、KB、 B、 b(即bit)的转换&#xff08;必学&#xff09; Ⅳ.闰年or平年 Ⅴ.count和counter方法 1. count() 方法的使用场景 2. Counter 类的介绍 3. count() 与 Counter 的区别 4. Counter 的高级应用 5.Counter的另一种使用 Ⅵ.ma…