数据结构与算法之排序: 归并排序 (Javascript版)
排序
- 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)
归并排序
- 该排序属于 分治 策略
- 将一个问题分解为两个问题来计算,计算完成之后,就会得到子任务的解,这些解不是最终问题的解,还需要merge起来
算法实现
// 归并排序
Array.prototype.mergeSort = function() {// 递归自身拆分const rec = (arr) => {let len = arr.length;if(len === 1) {return arr;}let m = Math.floor(len / 2); // 取中值let l = arr.slice(0, mid);let r = arr.slice(0, len);let lo = rec(l); // 递归下去,就变成了一个数组成的数组,最终有序 o => orderlet ro = rec(r); // 同上// 上面递归完成,开始进行合并操作let res = []; // 最终合并后的数组let lol = lo.length; // 左边数组长度let lor = ro.length; // 右边数组长度while(lol || lor) {if(lol && lor) {res.push(lo[0] < ro[0] ? lo.shift() : ro.shift())} else if(lol) {res.push(lo.shift())} else if(rol) {res.push(ro.shift())}}return res;}// 获取递归结果const r = rec(this);// 将有序数组拷贝到this上r.forEach((n, i) => {this[i] = n;});
}let arr = [5,4,3,2,1]
arr.insertionSort()
console.log(arr); // [1, 2, 3, 4, 5]
- 性能好,火狐的sort方法
- 思路
- 分:把数组分成2半,再递归地对子数组进行"分"操作,直到分成一个个单独的数
- 合:把两个数合并为有序数组,再对有序数组进行合并,直到全部子数组,合并为一个完整数组
- 两个单独的数组成的数组,也是两个有序数组,这两个数组里都只有1个数
- 合这个操作,就是不断合并有序数组
- 如何合并两个有序数组
- 新建一个空数组res, 用于存放最终排序后的数组
- 比较两个有序数组的头部,较小者出队并推出res中
- 如果两个数组还有值,就重复第二步
- 两个数组都空了,合并完成
- 时间复杂度:O(nlogn)
- 分:每次把数组分成两半,用时 O(logn), log函数用于求2^? = n, 自然要?=log_2 n, 即 O(logn)
- 注意,凡是分的操作,基本都是logn
- 合:O(n), 一个while循环体
- 分:每次把数组分成两半,用时 O(logn), log函数用于求2^? = n, 自然要?=log_2 n, 即 O(logn)
相关文章:
数据结构与算法之排序: 归并排序 (Javascript版)
排序 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例) 归并排序 该排序属于 分治 策略将一个问题分解为两个问题来计算,计算完成之后,就会得到子任务的解,这些解不是最终问题的解,还需要merge起来…...
Java练习题2021-2
"某地大数据防疫平台记录了往来的所有防疫相关信息,包括 本地或外地人员、健康码颜色、接种疫苗情况、最近一次核酸结果、最近一次核酸检测时间等。 该地某区域对于进入人员的要求为: 如果是本地人员,需要绿码和疫苗完全接种方可进入&am…...
深度学习面试题目01
01 什么是神经网络?02 请解释前馈神经网络(Feedforward Neural Network)的工作原理。03 什么是激活函数,为什么它在神经网络中重要?04 请解释反向传播算法(Backpropagation)05 什么是过拟合&…...
ESP32网络开发实例-HTTP-POST请求
HTTP-POST请求 文章目录 HTTP-POST请求1、HTTP POST2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何使用 ESP32向 ThingSpeak等常用 API 发出 HTTP POST 请求。 1、HTTP POST 超文本传输协议 (HTTP) 用作服务器和客户端之间的请求-响应协议。 它使它们之间的通信顺…...
怎么把成绩发给家长
亲爱的小伙伴们,作为老师,我们经常需要将学生的成绩发送给家长。但是,手动发送成绩不仅效率低,还容易出错。这时候,我们就需要一个强大的工具——成绩查询系统。它不仅可以轻松实现学生成绩的录入、存储和查询…...
Banana Pi BPI-W3 RK3588开发板基本使用文档
RK3588编译&烧录Linux固件 1、开发环境及工具准备 Rockchip Linux 软件包:linux-5.10-gen-rkr4 主机: 安装VMware搭建虚拟机,版本为Ubuntu 20.04 (硬盘容量大于100G)安装远程连接工具MobaXterm(可连接虚拟机方…...
源码解析SpringMVC之RequestMapping注解原理
1、启动初始化 核心:得到应用上下文中存在的全部bean后依次遍历,分析每一个目标handler & 目标方法存在的注解RequestMapping,将其相关属性封装为实例RequestMappingInfo。最终将 uri & handler 之间的映射关系维护在类AbstractHand…...
biocParallel学习
我好像做了一个愚蠢的测试 rm(listls()) suppressPackageStartupMessages({library(SingleCellExperiment)library(scMerge)library(scater)library(Matrix) })setwd("/Users/yxk/Desktop/test/R_parallel/") load("./data/exprsMat.RData") load(".…...
AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):一个AWTK工程
一个AWTK工程基于C/C++编写,可以分为如下几步: 结合下图,看懂启动的部分。一般一个AWTK工程,需要实现哪些部分,就是其中开始之后白色的部分,比如调用main函数和gui_app_start时会做一些操作,比如asset_init和application_init时要做一些设置,还有退出的函数application…...
MySQL主从复制(基于binlog日志方式)
目录 一、什么是主从复制?二、主从复制原理、存在问题和解决方法2.1.主从复制原理2.2.主从复制存在的问题以及解决办法2.3.主从复制的同步模型2.4.拓展—Mysql并行复制 三、主从复制之基于binlog日志方式3.1.bin-log日志简介3.2.bin-log的使用3.2.1.开启binlog3.2.2…...
计算机网络【CN】介质访问控制
信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据,以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听,等待一个随机的时…...
CDR和AI哪个软件更好用?
设计软件市场中,CorelDRAW和Adobe Illustrator(简称AI)无疑是两大重量级选手。它们各自拥有庞大的用户群和丰富的功能,但究竟哪一个更好用?本文将从多个角度出发,对这两款软件进行全面而深入的比较…...
保姆级认识AVL树【C++】(精讲:AVL Insert)
目录 前言 一,概念 二,定义 三,insert 1. 插入情况 情况一: 情况二: 情况三: 2. 旋转方法 法一:左单旋法 法二:右单旋法 法三:先左后右双旋法 法四…...
pinia中使用reactive声明变量,子页面使用时,值未改变,即不是响应式的(解决方法)
reactive赋值无效!reactive 不要直接data赋值!!!会丢失响应式的,只能通过obj.属性 属性值赋值 方法一. pinia中直接使用ref定义变量即可 export const useUserStoredefineStore(user,()>{let loginUserreactive({…...
基于springboot零食商城管理系统
功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品,并将它们添加到购物车中。购物车可以保存用户的选购商品,允许随时查看已选择的商品和它们的数量。一旦用户满意,他们…...
C++程序练习
定义一个类CheckPath,它由两个public方法组成: 1) checkPath:检查传入的字符串指定的路径是否存在,存在返回true,否则返回false。 2) createFilePath:根据传入的字符串指定的路径&…...
Golang 继承
在面向对象的编程语言中,继承是一种重要的机制,它允许子类继承父类的属性和方法。然而,Go语言在设计时没有直接支持传统意义上的继承,而是提供了一种更为灵活和简洁的方式来实现类似的功能。本文将探讨Golang中实现继承的方法和最…...
棋盘格测距-单目相机(OpenCV/C++)
一、文章内容简述: 1’ 通过cv::findChessboardCorners寻找棋盘格角点 2‘ 用cv::solvePnP计算旋转向量rvec和平移向量tvec 3’ 通过公式计算相机到棋盘格的距离 float distance sqrt(tvec.at<double>(0,0) * tvec.at<double>(0,0) tvec.at<do…...
031-从零搭建微服务-监控中心(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...
vue中使用xlsx插件导出多sheet excel实现方法
安装xlsx,一定要注意版本: npm i xlsx0.17.0 -S package.json: {"name": "hello-world","version": "0.1.0","private": true,"scripts": {"serve": "vue-c…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
