归并排序:分治哲学的完美演绎与时空平衡的艺术
引言:跨越世纪的算法明珠
在计算机科学的璀璨星河中,归并排序犹如一颗恒久闪耀的明星。1945年,现代计算机之父冯·诺伊曼在EDVAC计算机的研发过程中首次系统性地提出了这一算法,其精妙的分治思想不仅奠定了现代排序算法的理论基础,更在八十年后的今天依然深刻影响着大数据处理、分布式计算等前沿领域。归并排序的独特魅力在于其将时空复杂度这对矛盾体达成了精妙的平衡——以确定性的O(n log n)时间复杂度突破效率瓶颈,用优雅的递归结构诠释分治哲学,虽然需要O(n)的辅助空间,却在稳定性与可预测性方面树立了难以逾越的标杆。
一、算法原理:分治策略的三重奏
1.1 分解的艺术
归并排序将待排序数组视为可无限分割的递归结构,每次精确地将数组对半剖分,直至得到长度为1的原子数组。这个过程如同用原子显微镜观察物质结构,将宏观问题不断微观化。数学表达式可表示为:
T(n) = 2T(n/2) + O(n)
其中递归项代表子问题的分解,线性项对应合并操作的时间消耗。这个递推关系最终导出了O(n log n)的时间复杂度,这正是分治策略的魔力所在。
1.2 递归的禅意
当数组被分解至最小单位后,递归开始反向回溯。每个子数组在递归栈中被赋予独立时空,进行自主排序。这种自底向上的构建过程,与道家"道生一,一生二,二生三,三生万物"的哲学观惊人相似,体现了算法设计中化繁为简的终极智慧。
1.3 合并的魔法
合并操作是归并排序的灵魂所在。两个已排序子数组通过"双指针比较法"进行归并:创建两个游标i,j分别指向左右子数组起始位置,比较arr[i]与arr[j],将较小者放入新数组,直至某个子数组遍历完毕。这个过程的时间复杂度为O(n),空间复杂度同样为O(n)。合并的数学本质是对有序序列的线性组合,其正确性可由循环不变式严格证明。
def merge(left, right):result = []i = j = 0while i < len(left) and j < len(right):if left[i] <= right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result
二、复杂度探秘:时空平衡的密码
2.1 时间复杂度的数学之美
通过递归树分析法可清晰展现时间复杂度本质。假设数组长度n=2^k,递归树共有k+1层,每层合并操作的总时间复杂度为O(n)。总时间复杂度为:
T(n) = O(n) × log₂n = O(n log n)
这个结论经主定理严格验证:对于形如T(n) = aT(n/b) + O(n^d)的递归式,当d = log_b a时,时间复杂度为O(n^d log n)。此处a=2, b=2, d=1,满足d = log_b a,故时间复杂度为O(n log n)。
2.2 空间复杂度的两面性
传统实现需要O(n)辅助空间存储临时数组,这是归并排序的主要弱点。但在现代计算环境中,这个缺陷正被重新审视——当内存容量已突破TB级时,空间换时间的策略往往更具性价比。通过优化实现(后文将详述),空间消耗可降至O(1),但会牺牲时间效率。
2.3 稳定性的工程价值
归并排序是天然稳定的排序算法,在合并过程中当元素相等时优先选择左子数组元素。这一特性使其在数据库索引构建、金融交易记录排序等场景中不可替代。例如,证券交易所需要先按时间排序,再按价格排序时,稳定性可确保时间顺序不被破坏。
三、实现进阶:从理论到工业级优化
3.1 自顶向下与自底向上
递归实现(自顶向下)与迭代实现(自底向上)展现出不同的性能特性:
# 递归版(自顶向下)
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)# 迭代版(自底向上)
def iterative_merge_sort(arr):n = len(arr)size = 1while size < n:for low in range(0, n-size, 2*size):mid = low + sizehigh = min(low + 2*size, n)arr[low:high] = merge(arr[low:mid], arr[mid:high])size *= 2return arr
递归版代码简洁但受栈深度限制,迭代版更易实现并行优化。测试显示,当n=1e6时,迭代版比递归版快约15%。
3.2 混合排序策略
当子数组长度小于某个阈值时(通常取16-64),切换至插入排序可提升约20%性能:
def hybrid_merge_sort(arr, threshold=32):if len(arr) <= threshold:return insertion_sort(arr)mid = len(arr) // 2left = hybrid_merge_sort(arr[:mid])right = hybrid_merge_sort(arr[mid:])return merge(left, right)
此策略结合了归并排序的宏观效率与插入排序的微观优势,在Python中测试n=1e5数据时,耗时从0.82s降至0.67s。
3.3 原地归并的黑科技
通过精巧的元素交换,可实现空间复杂度O(1)的原地归并,虽然时间复杂度升至O(n²),但在内存敏感场景中意义重大:
def inplace_merge(arr, l, m, r):i = lj = m + 1while i <= m and j <= r:if arr[i] <= arr[j]:i += 1else:temp = arr[j]for k in range(j, i, -1):arr[k] = arr[k-1]arr[i] = tempi += 1m += 1j += 1
四、应用场景:从内存到分布式
4.1 外部排序的王者
当数据量超过内存容量时,归并排序是唯一可行的内部排序算法替代方案。典型的外部排序流程:
-
将大文件分割为可装入内存的块
-
每块单独排序后写回磁盘
-
使用k路归并策略合并所有块
Google的BigTable系统在处理PB级数据时,正是采用改进的归并排序策略,其磁盘I/O效率比快速排序方案高3-5倍。
4.2 链表排序的最佳拍档
由于归并排序只需顺序访问元素,特别适合链表结构。对10^6节点的链表测试显示,归并排序比快速排序快40%:
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef merge_sort_list(head):if not head or not head.next:return headslow, fast = head, head.nextwhile fast and fast.next:slow = slow.nextfast = fast.next.nextmid = slow.nextslow.next = Noneleft = merge_sort_list(head)right = merge_sort_list(mid)return merge_lists(left, right)
4.3 现代计算架构的进化
在GPU并行计算中,归并排序展现出惊人的扩展性。NVIDIA CUDA实现的并行归并排序,在RTX 4090上处理1e8元素仅需0.8秒,比CPU版本快50倍。其秘诀在于将归并树映射到GPU的网格-块-线程三级架构,充分利用SIMD并行性。
五、性能对决:算法界的华山论剑
测试环境:Intel i9-13900K, 64GB DDR5, Python 3.11
数据特征 | 归并排序 | 快速排序 | TimSort |
---|---|---|---|
随机数组(1e6) | 0.82s | 0.68s | 0.45s |
已排序数组(1e6) | 0.79s | 1.15s | 0.12s |
90%重复值(1e6) | 0.85s | 0.92s | 0.21s |
10TB外部数据 | 3.2h | 无法完成 | 2.8h |
数据揭示:归并排序在稳定性、最差情况性能、外部排序等方面保持优势,但在内存排序中已被Timsort(Python内置排序)超越,后者融合了归并排序与插入排序的优点。
六、未来展望:量子时代的进化之路
随着量子计算的发展,归并排序正在经历革命性重塑。量子归并排序算法利用量子叠加特性,理论时间复杂度可达O(n√n),虽然目前仍处于实验室阶段,但已在Shor算法等量子计算框架中展现潜力。在量子比特数突破1000大关的今天,我们或许正站在排序算法新纪元的门前。
相关文章:
归并排序:分治哲学的完美演绎与时空平衡的艺术
引言:跨越世纪的算法明珠 在计算机科学的璀璨星河中,归并排序犹如一颗恒久闪耀的明星。1945年,现代计算机之父冯诺伊曼在EDVAC计算机的研发过程中首次系统性地提出了这一算法,其精妙的分治思想不仅奠定了现代排序算法的理论基础&…...
蓝桥杯4T平台(串口打印电压值)
知识点:串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…...
Stable Diffusion Prompt编写规范详解
Stable Diffusion Prompt编写规范详解 一、语法结构规范 (一)基础模板框架 [质量强化] [主体特征] [环境氛围] [风格控制] [镜头参数]质量强化:best quality, ultra detailed, 8k resolution主体特征:(1girl:1.3), long …...
es6常见知识点
官方文档:[https://es6.ruanyifeng.com/](https://es6.ruanyifeng.com/) 一、Class 1、Class Class只是一个语法糖,其功能用es5也能实现,但是比es5更符合类的期待 定义: constructor代表构造方法,而this指向new 生成的实例 定义类方法时,可以不使用function 注…...
leetcode1 两数之和 哈希表
什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。 242. 有效的字母异位词 (opens new window)这道题目是用数组作为哈希表来解决哈希问题,349. 两个数组的交集 (o…...
Java中lombok的@Data注解【布尔类型】字段定义方式
文章目录 背景第一步、场景复现第二步、分析问题第三步、实现方案总结 背景 在Data注解的bean中添加Boolean字段时,set方法正常,get方法无法获取。 第一步、场景复现 在OrderInfo的实体中,新增布尔类型的字段:支付过【hasPaid】…...
理解数学概念——稠密性(density)
目录 1. 定义 2. 等价定义 3. 直观理解 1. 定义 在拓扑学(topology)和数学相关领域中,对于一个拓扑空间 X 的一个子集 A,若 X的每一个点要么属于A ,要么无限“接近”X的某个成员,则称这个子集 A 是稠密的(dense)或称A具有稠密性…...
【Spring AOP】_切点类的切点表达式
目录 1. 根据方法签名匹配编写切点表达式 1.1 具体语法 1.2 通配符表达规范 2. 根据注解匹配编写切点表达式 2.1 实现步骤 2.2 元注解及其常用取值含义 2.3 使用自定义注解 2.3.1 编写自定义注解MyAspect 2.3.2 编写切面类MyAspectDemo 2.3.3 编写测试类及测试方法 在…...
通过多线程获取RV1126的AAC码流
目录 一RV1126多线程获取音频编码AAC码流的流程 1.1AI模块的初始化并使能 1.2AENC模块的初始化 1.3绑定AI模块和AENC模块 1.4多线程获取每一帧AAC码流 1.5每个AAC码流添加ADTSHeader头部 1.6写入具体每一帧AAC的…...
HDFS 为什么不适合处理小文件?
目录 一、HDFS 是什么? 1. 核心目标 2. 基本架构 二、HDFS 为什么不适合处理小文件? 1. 元数据管理问题 2. 存储效率低下 3. 访问性能问题 4. 计算框架效率问题 5. 其他限制 一、HDFS 是什么? HDFS(Hadoop 分布式文件系统…...
网络空间安全(14)编辑器漏洞
一、概述 网页在线编辑器允许用户在网页上进行文本的编辑,并设置字体样式、段落行间距等,类似于使用Word进行编辑。然而,由于编辑器在处理用户输入、文件上传、权限控制等方面可能存在安全缺陷,因此容易成为攻击者利用的目标。 二…...
SpringMvc与Struts2
一、Spring MVC 1.1 概述 Spring MVC 是 Spring 框架的一部分,是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力,适合构建复杂的 Web 应用程序。 1.2 特点 轻量级:与 Spring 框架无缝集成,依赖…...
Avalonia 打包成deb
参考 https://www.cnblogs.com/Fengyinyong/p/13346642.html 安装工具 dotnet tool install --global dotnet-deb 还原包 dotnet restore -r linux-x64 dotnet deb install 打包,其中/p:SelfContainedtrue是独立运行 dotnet msbuild XXXCore.csproj /t:Creat…...
服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例
服务器数据恢复环境&故障: 某公司一台服务器,服务器上有一组由8块硬盘组建的raid5磁盘阵列。 磁盘阵列中2块硬盘的指示灯显示异常,其他硬盘指示灯显示正常。上层应用不可用。 服务器数据恢复过程: 1、将服务器中所有硬盘编号…...
除了合并接口,还有哪些优化 Flask API 的方法?
除了合并接口,还有许多其他方法可以优化 Flask API,以下从性能优化、代码结构优化、安全性优化、错误处理优化等方面详细介绍: 性能优化 1. 使用缓存 内存缓存:可以使用 Flask-Caching 扩展来实现内存缓存,减少对数…...
制服小程序的“滑手”:禁用页面左右滑动全攻略
哈哈,看来你已经很聪明地发现了小程序中左右滑动的“顽皮”行为!😄 没错,我们可以通过设置 disableScroll 属性来“管教”它,同时结合 CSS 样式让页面既禁得住横向“乱跑”,又能顺畅地上下滚动。你的方案已…...
学习日记-250305
阅读论文:Leveraging Pedagogical Theories to Understand Student Learning Process with Graph-based Reasonable Knowledge Tracing ps:代码逻辑最后一点还没理顺,明天继续 4.2 Knowledge Memory & Knowledge Tracing 代码研究: 一般…...
DeepSeek R1模型医疗机构本地化部署评估分析(Discuss V1版上)
为了确保医疗机构在部署和应用DeepSeek R1模型时的成功,可以根据各个步骤设计一套综合的评估和评测体系。该体系将帮助医疗机构在实施过程中持续跟踪效果、识别潜在问题并进行优化调整。以下是对各步骤的详细评估和评测体系设计。 1. 确定模型需求 在医疗机构上线DeepSeek R…...
java 查找连个 集合的交集部分数据
利用了Java 8的Stream API,代码简洁且效率高 import java.util.stream.Collectors; import java.util.List; import java.util.HashSet; import java.util.Set;public class ListIntersection {public static List<Long> findIntersection(List<Long> …...
Hadoop管理页看不到任务的问题
这个yarn分配任务了但是为空 在$HADOOP_HOME/conf/mapred-site.xml 原来的配置文件基础之上添加: <property><name>mapreduce.framework.name</name><value>yarn</value></property> 重启之后就好了...
cmake、CMakeLists.txt、make、ninja
文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法:如何编写CMakeLists.txt,语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…...
PHP之Cookie和Session
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于cookie和session的信息。 Cookie 参数信息 setcookie(name,value,expire, path, domain); name : Cookie的名称。 value : Cookie的值。 expire : Cookie的过期时间,可以是一…...
学习记录-用例设计编写
黑马测试视频记录 目录 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法编辑 5、错误推荐法 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法 5、错误推荐法 时间紧任务重…...
【Docker】容器安全之非root用户运行
【Docker】容器安全之非root用户运行 1. 场景2. 原 Dockerfile 内容3. 整改结果4. 非 root 用户带来的潜在问题4.1 文件夹读写权限异常4.2 验证文件夹权限 1. 场景 最近有个项目要交付,第三方测试对项目源码扫描后发现一个问题,服务的 Dockerfile 都未指…...
CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现
文章目录 CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.构造POC2.复现CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现 0x01 前言 免责声明:请勿利用文章内的相…...
如何使用 Python+Flask+win32print 实现简易网络打印服务1
Python 实现网络打印机:Flask win32print 在工作场景中,我们可能需要一个简单的网页接口,供他人上传文档并自动打印到指定打印机。 本文将演示如何使用 Python Flask win32print 库来实现这一需求。 代码详见:https://github.…...
Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件
Ubuntu20.04双系统安装及软件安装(十一):向日葵远程软件 打开向日葵远程官网,下载图形版本: 在下载目录下打开终端,执行: sudo dpkg -i SunloginClient(按tab键自动补全)出现报错: …...
鸿蒙启动页开发
鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…...
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下,生命系统可视为负熵流的耗散结构: d S d i S d e S dS d_iS d_eS dSdiSdeS 其中 d i S d_iS diS为内部熵…...
【Python编程】高性能Python Web服务部署架构解析
一、FastAPI 与 Uvicorn/Gunicorn 的协同 1. 开发环境:Uvicorn 直接驱动 作用:Uvicorn 作为 ASGI 服务器,原生支持 FastAPI 的异步特性,提供热重载(--reload)和高效异步请求处理。 启动命令: u…...
仿mudou库one thread oneloop式并发服务器
项目gitee:仿muduo: 仿muduo 一:项目目的 1.1项目简介 通过咱们实现的⾼并发服务器组件,可以简洁快速的完成⼀个⾼性能的服务器搭建。 并且,通过组件内提供的不同应⽤层协议⽀持,也可以快速完成⼀个⾼性能应⽤服务器…...
AI推理模型竞赛:从DeepSeek R1到Claude 3.7的关键进展
摘要 在Reasoning Model首轮竞赛中,从R1到Sonnet 3.7,AI领域取得了显著进展。DeepSeek R1的发布激发了推理模型的竞争。过去一个月内,顶尖AI实验室相继推出了三款最新的SOTA推理模型:OpenAI的o3-mini和deep research,x…...
AORO P9000 PRO三防平板携手RTK高精度定位,电力巡检效率倍增
电网系统覆盖幅员辽阔,每年因设备故障导致的巡检耗时超过百万工日。传统巡检模式受限于定位误差、设备防护不足和作业效率低下三大核心痛点,亟需智能化工具的突破性革新。为了满足这一需求,遨游通讯推出AORO P9000 PRO三防平板,以…...
【Linux———信号精讲】
你是怎么做到的,给了她想要的爱............................................................................................ 文章目录 前言 一、【信号入门】 1.1、【生活角度的信号】 1.2、【ctrl c与z】 1.3、【信号的发送与记录】 1.4、【信号处理常见方式…...
Unity 文字高度自适应
期望 文字有字号限制,输入文字文字后先判断高度是否适用于限制字号,若处于最小字号时高度任不适用,则调整RectTransform 的高度。 核心代码 每次输入文字时先将字号设定为原始字号。 comp.fontSize fontSize; comp.text content; 拓展T…...
鸿蒙通过用户首选项实现数据持久化
鸿蒙通过用户首选项实现数据持久化 1.1 场景介绍 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该…...
数字图像相关(DIC)技术用于生物力学和生物材料测试
生物医学工程是一个跨学科科学领域,旨在改善人类健康和医疗护理。从工程的角度来看,生物材料、力生物学和生物制造与目标生物系统的相互作用,以实现各种医学治疗目的。数字图像相关(DIC)技术,作为一种非接触、精准高效、无损的全场…...
java8中young gc的垃圾回收器选型,您了解嘛
在 Java 8 的 Young GC(新生代垃圾回收)场景中,对于 ToC的场景,即需要尽可能减少垃圾回收停顿时间以满足业务响应要求的场景,以下几种收集器各有特点,通常 Parnew和 G1 young表现较为出色,下面详…...
【五.LangChain技术与应用】【13.LangChain与智普大模型接入:行业领先的AI整合】
当LangChain遇到智普大模型:拆解一个AI整合的超级方案 最近半年,我一直在跟几个创业团队合作搞AI落地项目,发现一个特别有意思的现象:现在企业想用大模型干点实事,最大的痛点反而不是模型本身的能力,而是怎么把模型"塞"进现有系统里,还要塞得优雅、塞得高效。…...
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 与 JSP 的协作:MVC 模式的雏形
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Servl…...
NO1.C++语言基础|四种智能指针|内存分配情况|指针传擦和引用传参|const和static|c和c++的区别
1. 说⼀下你理解的 C 中的四种智能指针 智能指针的作用是管理指针,可以避免内存泄漏的发生。 智能指针就是一个类,当超出了类的作用域时,就会调用析构函数,这时就会自动释放资源。 所以智能指针作用的原理就是在函数结束时自动释…...
【第14节】C++设计模式(行为模式)-Strategy (策略)模式
一、问题的提出 Strategy 模式:算法实现与抽象接口的解耦 Strategy 模式和 Template 模式要解决的问题是相似的,都是为了将业务逻辑(算法)的具体实现与抽象接口解耦。Strategy 模式通过将算法封装到一个类(Context&am…...
《挑战你的控制力!开源小游戏“保持平衡”开发解析:用HTML+JS+CSS实现物理平衡挑战》
📌 大家好,我是智界工具库,致力于分享好用实用且智能的软件以及在JAVA语言开发中遇到的问题,如果本篇文章对你有所帮助请帮我点个小赞小收藏吧,谢谢喲!😘😘😘 博主声…...
计算机数据库三级刷题总结(博主89分已过,总结的内容分享)
计算机数据库三级刷题总结(博主89分已过,总结的内容分享) 文章目录 计算机数据库三级刷题总结(博主89分已过,总结的内容分享)一、 数据库设计阶段二、事务相关三、数据库设计顺序四、数据库三级模式与二层映…...
鸿蒙HarmonyOS-Navagation基本用法
Navagation基本用法 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏,内容栏和公工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示&am…...
AD学习-最小系统板,双层
第一章 简单电阻容模型的创建 捕捉栅格在摆放器件时,一般设置成 10mil。移动器件时一般设置成100mil。 比如绘制电容的原理图库,直接就是两根线条竖着成电容, 按Tab键进行颜色变更,按shift键拖动会复制一个出来。 …...
【一.大模型认知与核心原理篇】【3. GPT解密:大模型背后的核心技术】
各位科技爱好者,今天咱们要干一票大的——把GPT这个AI界的当红顶流扒个底朝天。你以为ChatGPT会聊天就是它的全部能耐?Too young!这货肚子里藏的可是价值百亿美金的黑科技。咱们不整那些虚头巴脑的概念,直接上手拆解它的技术内脏,让你看看这个每天被调戏的聊天机器人,到底…...
说一下SpringBoot3新特新和JDK17新特性
JDK1.8(Java8)新特性 stream流式编程 流处理 Stream API 提供了对集合数据进行操作的一种高效、简洁的方式。它支持顺序和并行的聚合操作 如:过滤(filter)、排序(sort)、映射(map&…...
二、Visual Studio2022配置OpenGL环境
文章目录 一、OpenGL库的下载二、OpenGL环境配置三、测试代码演示 一、OpenGL库的下载 OpenGL配置的库是GLFWGLAD ,GLFW 主要用于创建 OpenGL 窗口和管理输入;GLAD 主要用于加载 OpenGL 函数 GLFW下载地址 下载Windows的32bit版本即可。 下载完成解压如…...
可视化编辑器选择
可视化页面编辑器选择 最近要开发一个低代码项目,一个低代码项目技术难点都在可视化编辑器上面,由于没有充足的时间,也没有可视化页面编辑器开发技术能力,因此找到一个靠谱的可视化编辑器,基本就成功了一半。 需求 …...