drawDB:打造高效数据库设计流程
drawDB:打造高效数据库设计流程
- drawDB 简介
- 资源链接
- 核心功能详解
- 1. 直观的实体关系图设计
- 2. SQL 脚本生成
- 3. SQL 导入功能
- 4. 本地化存储与分享功能
- 5. 自定义主题与外观
- 安装和使用教程
- 本地开发环境搭建
- 构建生产版本
- Docker 部署
- 基本使用方法
- 应用场景和实际价值
- 适用业务场景
- 与类似工具的比较优势
- 实际应用价值
- 局限性与注意事项
- 结论
在数据库设计领域,一个好的可视化工具能极大提升工作效率和协作体验。今天,我要向大家介绍一款备受欢迎的开源项目 —— drawDB,一个免费、简洁且直观的在线数据库关系图编辑器和 SQL 生成工具。它不仅功能强大,还拥有友好的用户界面,让数据库设计变得轻松愉快。
drawDB 简介
drawDB 是一款基于浏览器的数据库实体关系图(DBER)编辑器,它允许用户在不需要创建账户的情况下,通过简单的点击操作来构建数据库图表、导出 SQL 脚本、自定义编辑器等。作为一个开源项目,它已在 GitHub 上获得了相当高的关注度,拥有约 27.5k 的 stars,这充分说明了它在开发者社区中的受欢迎程度。
该项目的核心理念是提供一个简单、直观且功能全面的工具,帮助开发者、数据库管理员和业务分析师轻松实现数据库设计和可视化,并且不需要任何付费订阅或账户注册。
资源链接
- 官方网站:https://drawdb.app/
- Discord社区:加入Discord
- X平台关注:@drawDB_
- GitHub仓库:https://github.com/drawdb-io/drawdb
核心功能详解
1. 直观的实体关系图设计
drawDB 的主要功能是让用户能够以视觉化的方式设计数据库结构。在其简洁的界面中,用户可以:
- 创建表格并定义字段、数据类型和约束条件
- 通过拖放操作建立表之间的关系
- 设置主键、外键和索引
- 自定义表格外观和布局,使图表更加清晰易读
这种视觉化的设计方式尤其适合团队协作和与非技术人员的沟通,因为它将复杂的数据库结构转化为易于理解的图形表示。
2. SQL 脚本生成
一旦完成了数据库关系图的设计,drawDB 可以自动生成对应的 SQL 脚本,支持多种主流数据库系统,包括:
- MySQL
- PostgreSQL
- SQLite
- SQL Server
- 其他主流数据库系统
这一功能极大地简化了从设计到实现的过程,让用户无需手动编写创建表格和关系的 SQL 语句,减少了出错的可能性。
3. SQL 导入功能
除了从零开始设计数据库,drawDB 还支持从现有 SQL 脚本导入功能,可以将已有的数据库结构转换为可视化图表。这对于需要理解或重构现有数据库的开发者来说尤其有用,能够快速获取整体结构的直观视图。
4. 本地化存储与分享功能
drawDB 会自动将用户的设计保存在浏览器的本地存储中,无需担心意外关闭浏览器导致工作丢失。同时,它还提供了项目分享功能,允许用户通过链接与团队成员分享自己的数据库设计,促进协作和反馈。
5. 自定义主题与外观
为了提供更好的用户体验,drawDB 允许用户根据个人偏好自定义界面主题和颜色方案,支持明暗两种模式,以适应不同的工作环境和个人习惯。
安装和使用教程
本地开发环境搭建
如果您希望在本地搭建 drawDB 开发环境,可以按照以下步骤操作:
git clone https://github.com/drawdb-io/drawdb
cd drawdb
npm install
npm run dev
执行上述命令后,您可以通过本地服务器(通常是 http://localhost:3000)访问 drawDB。
构建生产版本
要构建生产版本,可以执行:
git clone https://github.com/drawdb-io/drawdb
cd drawdb
npm install
npm run build
Docker 部署
drawDB 也提供了 Docker 支持,方便快速部署:
docker build -t drawdb .
docker run -p 3000:80 drawdb
如果需要使用分享功能,则需要设置 server 并根据 .env.sample
配置相应的环境变量。
基本使用方法
- 创建新表格:点击工具栏上的"添加表格"按钮,然后在画布上放置新表格。
- 定义字段:双击表格或使用右侧面板添加字段,指定名称、数据类型和约束。
- 建立关系:从一个表格的字段拖动到另一个表格的相关字段,创建外键关系。
- 导出 SQL:完成设计后,点击"导出 SQL"按钮,选择目标数据库类型,获取可直接执行的 SQL 脚本。
- 保存与分享:设计会自动保存到本地存储,也可以通过分享链接与他人协作。
应用场景和实际价值
适用业务场景
drawDB 在以下场景中特别有价值:
- 数据库初始设计:在项目初期快速设计和迭代数据库结构。
- 团队协作设计:让团队成员,包括非技术人员,能够直观地参与数据库设计讨论。
- 现有数据库文档化:将现有数据库转换为可视化图表,便于理解和文档化。
- 教育教学:作为教学工具,帮助学生学习数据库设计和实体关系概念。
- 原型开发:在应用原型阶段快速设计数据结构,验证设计可行性。
与类似工具的比较优势
相比其他数据库设计工具,drawDB 具有以下优势:
- 免费开源:不同于许多商业工具,drawDB 完全免费且开源,没有功能限制。
- 无需账户:不需要注册账户即可使用所有功能,保护用户隐私。
- 浏览器中运行:无需安装任何软件,随时随地可用。
- 直观简洁:界面设计简洁明了,易于上手,降低了学习成本。
- 双向操作:支持通过图形界面设计数据库,也支持通过 SQL 导入现有结构。
实际应用价值
- 提高效率:减少了手动编写 SQL 脚本的时间和出错可能性。
- 促进沟通:通过可视化展示数据库结构,帮助技术团队与业务团队更有效地沟通。
- 规范设计:帮助开发者遵循数据库设计最佳实践,提高数据库质量。
- 降低成本:作为免费工具,减少了项目的软件许可成本。
- 简化学习曲线:对数据库初学者友好,帮助他们理解数据库设计原理。
局限性与注意事项
尽管 drawDB 功能强大,但也有一些局限性需要注意:
- 复杂存储过程支持有限:对于高级数据库功能如存储过程、触发器等支持可能有限。
- 大型数据库可能性能受限:由于是浏览器应用,对于特别复杂的数据库结构,可能会有性能瓶颈。
- 需要网络连接分享:分享功能需要网络连接和服务器支持。
- 数据安全考虑:敏感数据库设计在使用云端分享功能时需谨慎。
结论
drawDB 作为一款免费开源的数据库设计工具,以其简洁直观的界面和强大的功能,为数据库设计工作提供了极大便利。它不仅适合数据库专业人员使用,对初学者和非技术人员也同样友好。通过将复杂的数据库结构可视化,并自动生成 SQL 脚本,drawDB 大大简化了数据库设计流程,提高了工作效率。
作为一个活跃的开源项目,drawDB 正在不断发展和完善。如果你正在寻找一款简单易用的数据库设计工具,不妨尝试一下 drawDB,相信它能为你的工作带来不少便利。
无论是初创企业的快速原型设计,还是大型企业的数据库文档化,drawDB 都能提供有力支持,帮助开发者和团队更好地理解和管理数据结构,最终提升软件开发的质量和效率。
相关文章:
drawDB:打造高效数据库设计流程
drawDB:打造高效数据库设计流程 drawDB 简介资源链接 核心功能详解1. 直观的实体关系图设计2. SQL 脚本生成3. SQL 导入功能4. 本地化存储与分享功能5. 自定义主题与外观 安装和使用教程本地开发环境搭建构建生产版本Docker 部署基本使用方法 应用场景和实际价值适用…...
【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法
内容改写: 本次分享的是子比主题顶部展示注册用户与会员信息的功能模块及其实现方式。 你可以通过两种方式启用该功能: 直接在后台进入“外观 → 小工具”启用该展示模块,操作简便;也可将提供的代码覆盖至子比主题目录中&#…...
gitblit安装教程,搭建一个属于自己的Git版本仓库
本章教程,主要记录如何在Windows服务器上利用gitblit搭建GIT私有化仓库。 一、gitblit简介 官网地址:https://www.gitblit.com/ Gitblit 是一个开源的纯 Java 技术栈,用于管理、查看和服务Git仓库。 它主要设计为一款面向希望托管集中式仓库的小型工作组的工具。 二、基础环…...
2023年第十四届蓝桥杯省赛B组Java题解【简洁易懂】
2023年第十四届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率(预估)A阶乘求和结果填空★☆☆模运算、数学规律95%B幸运数字结果填空★★☆进制转换、数位和计算80%C数组分割编程题★★☆组合数学、奇偶性分析65…...
Javase 基础加强 —— 01 异常
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 课程安排…...
iview 表单验证问题 Select 已经选择 还是弹验证提示
问题:iview 的 Select 下拉框的时候,数据验证必填,明明选择了数据,却一直提示验证不能通过 html代码: <Form ref"FormData" :model"FormData" :rules"ruleValidate" :label-width&qu…...
OrCAD中离图连接器、端口及网络标签的作用范围与选择指南
一、OrCAD主要连接元素概述 在OrCAD Capture原理图设计环境中,有三种主要的网络连接元素:离图连接器(Off-Page Connector)、端口(Port)和网络标签(Net Alias)。理解它们的作用范围和使用场景对设计清晰、可维护的原理图至关重要。 PS: 电源和…...
dpm_sysfs_add
这段代码是 Linux 内核中**设备电源管理(PM)子系统**与 **sysfs 文件系统**交互的核心实现,主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析: --- ### 一、功能架构全景 mermaid graph TD …...
【AI论文】Phi-4-reasoning技术报告
摘要:我们引入了Phi-4-reasoning,这是一种拥有140亿参数的推理模型,在复杂的推理任务中表现出了强大的性能。 通过监督式微调Phi-4,在精心策划的“可教”提示集上进行训练,这些提示集是根据复杂性和多样性的适当水平选…...
Android ART运行时无缝替换Dalvik虚拟机的过程分析
目录 一,概述 二,dex文件优化 一,概述 Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。老罗不打算分析ART的实现原理,只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机…...
node.js为什么产生?
从官网得知介绍如下 https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejs Node.js是一个开源和跨平台的JavaScript运行时环境。 Node.js在浏览器之外运行V8 JavaScript引擎,这是Google Chrome的核心。这使得Node.js具有很高的性能。 Node.js应…...
智能工厂边缘计算:从数据采集到实时决策
智能工厂边缘计算:从数据采集到实时决策 引言 在智能制造场景中,传统云计算架构面临三大核心挑战:平均200ms的网络延迟无法满足实时控制需求,90%的工业数据未被有效利用,以及每月高达15TB的数据传输成本。边缘计算技术通过将计算能力下沉到数据源头,正在构建"端-边…...
个人健康中枢的多元化AI网络革新与精准健康路径探析
引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…...
前端面试宝典---性能优化
一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入,这样就不会占用打包体积了 2. prefetch 预加载 例如,之后马上有个场景需要一个图片,我们就可以通过link 的 prefetch 对资源进行预先加载 再例如,我们公司是无网络开…...
【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制
文章目录 SpringBoot JSqlParser MyBatis 数据权限实现方案一、环境准备1. 添加依赖 二、用户上下文管理1. 用户上下文持有类 三、数据权限拦截器实现1. MyBatis拦截器核心类 四、Spring Security集成1. 用户信息注入 五、配置项示例application.yml 六、使用示例1. 业务查询…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL窗口函数与高级聚合:从排序到动态分析的全场景应用1. 窗口函数核心概念解析1.1 窗口函数语法结构1.2 核心组成要素2. 排名窗口函数深度解析2.1 ROW_NUMBER():唯一顺序排名示例演示2.2 `RANK…...
python全自动爬取m3u8网页视频(各类网站都通用)
当前人工智能,大语言模型的火热,使得python这门编程语言的使用越来越广泛。最近也开始学习了python,发现它在自动化方面的确有得天独厚的优势。python的简单易用,丰富的开源库,完善的生态,使得它有可能成为…...
C++负载均衡远程调用学习之上报功能与存储线程池
目录 1. Lars-reportV0.1 report模块介绍 2.Lars-reporterV0.1 reporter项目目录构建 3.Lars-ReporterV0.1 数据表和proto协议环境搭建 4.Lars-ReporterV0.1上报请求业务处理 5.Lars-ReporterV0.1上报请求模块的测试 6.Lars-ReporterV0.2开辟存储线程池-网络存储分离 1. L…...
今天python练习题
目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败,失败可能成为我们前进的动力! 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…...
【leetcode100】最长递增子序列
1、题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 …...
R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
一、引言 本文我们复现苏黎世大学团队Franois Keck等在Nature最新文章“The global human impact on biodiversity”中的全球地图。 之前的图纸是在平面坐标系里面进行绘制,本次我们在罗宾逊投影中进行绘制。整体代码逻辑非常简单,就是采样点坐标系的转换…...
百度系列产品学习
1.react-bmapgl封装逻辑 Map 分析react-bmapgl库中Map组件的封装流程,并以mermaid图展示。首先分析Map组件的核心实现,包括生命周期方法和子组件渲染逻辑。然后研究WrapperHOC和Component基类的封装模式,理解事件绑定和属性处理的通用逻辑。…...
高等数学第三章---微分中值定理与导数的应用(3.4~3.5)
3.4 函数的单调性与曲线的凹凸性 一、函数的单调性 1. 函数单调性定义回顾 设函数 f ( x ) f(x) f(x) 的定义域为 D D D,区间 I ⊆ D I \subseteq D I⊆D。 如果对任意 x 1 , x 2 ∈ I x_1, x_2 \in I x1,x2∈I,当 x 1 < x 2 x_1 < x…...
idea结合CopilotChat进行样式调整实践
一、前言: 本文主要分享在前端开发中借助AI能力调整样式,提高开发效率 对应视频【idea结合CopilotChat进行样式调整实践-哔哩哔哩】 二、实践: 2-1、现状确认: 表格上方新增了button、swtich、select组件,需要调整…...
668SJBH报刊发行系统
1 前言 随着我国信息产业的迅猛发展,手工管理方式已不适应社务管理的要求,报社的日常管理正面临着信息化的挑战,采用计算机管理以提高服务质量和管理水平势在必行。发行管理是社务管理的一个重要组成部分,是报社和客户联系的纽带…...
格式化字符串漏洞
原理 在c中,printf函数在打印输出变量时通常不是直接输出,而是用一个占位符如%s printf("the number is %d\n",a);//通常用 printf(a);//而不是直接输出 虽然直接输出也没有太大的问题,但如果用格式化输出,没有给后面…...
如何查看电脑IP地址和归属地:全面指南
在数字化时代,了解自己电脑的IP地址和归属地信息变得越来越重要。无论是进行网络故障排查、远程办公设置,还是出于网络安全考虑,掌握这些基本信息都很有必要。本文将详细介绍如何查看电脑的公网IP、内网IP以及归属地信息,并提供常…...
深入解析 MQTT 协议:物联网通信的基石
在当今物联网蓬勃发展的时代,设备之间高效、可靠的通信变得至关重要。MQTT(Message Queuing Telemetry Transport)协议,作为一种轻量级的消息传输协议,正逐渐成为物联网通信的基石,广泛应用于各种场景中。 …...
48变现干货:分销裂变方式提高销量
产品运营活动中,我们可以根据对产品属性和特性,进行选择特定的方法,分销便是一种低成本各方获利的行为之一,但并不一定100%适用所有产品。 分销及裂变的概念 “分销”是指通过用户、达人、KOL等非官方渠道,参与产品的推广与销售,并获得相应收益的机制。它是一种以奖励为…...
AI入门:Prompt提示词写法
提示词(Prompt)是人与AI沟通的桥梁,它不是冰冷的代码指令,而是一场充满智慧与温度的对话。掌握精妙的提示词撰写技巧,能让AI更精准地理解需求,高效输出理想结果。其核心就在于——将AI视作身边真实的朋友、…...
MySQL复合查询全解析:从基础到多表关联与高级技巧
前言: 本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句 创建表的语句: DROP database IF EXISTS scott; CREATE database IF NOT EXISTS scott DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE scott;D…...
移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题
移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题 1️⃣ 准备工作2️⃣ 移动原始文件夹3️⃣ 创建符号链接4️⃣ 清理原始文件夹5️⃣ 验证操作📝 注意事项🔄 常见问题排查1️⃣ 准备工作 关闭 Trae 程序:确保所有 Trae 相关进程已完全退出(包括后台服务)。创建目标文件夹…...
【AI论文】COMPACT:从原子级到复杂级的组合式视觉能力调优
摘要:多模态大语言模型(MLLM)擅长简单的视觉语言任务,但在面对需要多种能力的复杂任务时却很吃力,例如同时识别物体、计算数量和理解它们的空间关系。 这可能部分是由于视觉指令调整(VIT)这一ML…...
【leetcode】队列 + 宽搜,树形结构层序遍历的基础与变化
前言 🌟🌟本期讲解关于力扣的几篇题解的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不…...
Spring AI聊天模型API:轻松构建智能聊天交互
Spring AI聊天模型API:轻松构建智能聊天交互 前言 在当今数字化时代,智能聊天功能已成为众多应用程序提升用户体验、增强交互性的关键要素。Spring AI的聊天模型API为开发者提供了一条便捷通道,能够将强大的AI驱动的聊天完成功能无缝集成到…...
力扣-链表-2 两数相加
思路 两个指针同时遍历,维护一个进位值,同时还要维护第一个链表的前序,如果第二个链表比第一个长的时候,利用这个前序指针把第二个链表多余的内容,添加到第一个链表的末尾 代码 class Solution {public ListNode ad…...
leetcode 59. 螺旋矩阵 II
题目描述 代码: class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n,vector<int>(n,0));int num 1;int len n;int start 0;while(len > 0){int row start;int column start;if…...
【操作系统】深入理解内存管理:从虚拟内存到OOM Killer
引言 在现代计算机系统中,内存管理是操作系统最核心的功能之一。本文将围绕内存管理的几个关键概念展开讨论,包括虚拟内存机制、内存分配原理、OOM Killer的工作机制以及不同系统架构下的内存限制。 虚拟内存:突破物理限制的关键技术 虚拟…...
《政治最后的日子》章节
政治与中世纪教会的类比性衰落 作者提出现代民族国家正重复中世纪教会的衰落轨迹: 两者均曾作为社会组织核心存在约5个世纪 晚期都成为生产力阻碍(中世纪教会税收负担/现代国家官僚低效) 末期均出现管理者普遍腐败与公众蔑视(…...
Rust Trait 学习
概述 特征(trait)是rust中的概念,类似于其他语言中的接口(interface)。特征定义了一个可以被共享的行为,只要实现了特征,你就能使用该行为。 如果不同的类型具有相同的行为,那么我们…...
基于开源链动2+1模式AI智能名片S2B2C商城小程序的爆品力构建研究
摘要:在兴趣电商生态中,爆品力已成为品牌实现指数级增长的核心竞争力。本文以开源链动21模式AI智能名片S2B2C商城小程序为技术载体,结合抖音平台的内容传播特性,提出“需求挖掘-技术赋能-内容转化”三位一体的爆品力构建模型。通过…...
【SimSession 】2:PacedReceiver:支持与 PacedVideoSender 本地联调
单独的基于libuv的发送能力,如何进一步在SimSession内集成使用?打算进行本地模拟俩线程,发送和接收,进行测试: 单独的发送测试 【SimSession】1:将视频发送逻辑与 libuv 事件循环集成是一个典型的并发设计问题 分析后,D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-…...
5 什么情况下需要微调
这个问题其实很重要,因为现代大模型训练出来已经非常强大,可能真的不需要微调。 我们可以通过 RAG 或提示词工程来实现目标。 需要微调的场景与替代方案分析 微调(Fine-tuning)确实不是所有场景都必需的,特别是考虑到现代大型语言模型(LLM…...
Docker 渡渡鸟镜像同步站 使用教程
Docker 渡渡鸟镜像同步站 使用教程 🚀 介绍 Docker.aityp.com(渡渡鸟镜像同步站)是一个专注于为国内开发者提供 Docker 镜像加速和同步服务的平台。它通过同步官方镜像源(如 Docker Hub、GCR、GHCR 等),为…...
位图的实现和拓展
一:位图的介绍 ①:需要位图的场景 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 要判断一个数是否在某一堆数中,我们可能会想到如下方法: A…...
字符串问题c++
题目描述 小 Z 有一个字符串 s,他对这个字符串会进行如下两个操作: 1 p c 把字符串的第 p 个字符改成 c2 l r 把 s 的第 l 个字符到第 r 个字符按顺序输出。 这里『第 i 个字符』的下标计数从 1 开始,例如,a 是字符串 abc 的第…...
Redis事务
Redis中的事务是指提供一种将多个命令打包到一起,一次性按照顺序执行的机制。Redis在执行事务期间,不会接收处理其他操作命令。 Redis事务有以下局限性 无回滚机制:如果某个命令执行失败,不会影响其他命令的执行,因此…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:数据质量分析之异常值识别(Z-score法 / IQR法 / 业务规则法)3.3 异常值识别3.3.1 Z-score法3.3.2 IQR法3.3.3 业…...
MCP底层协议完整通信过程
2025 年是智能体的元年, 也注定是智能体集中爆发的一年! 两个互联领域的重大挑战: 第一、 Agent 与 Tools (工具)的交互 Agent 需要调用外部工具和 API...
C语言 指针(5)
目录 1.冒泡排序 2.二级指针 3.指针数组 4.指针数组模拟二级数组 1.冒泡排序 1.1 基本概念 冒泡排序(Bubble Sort) 是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元 素,如果它们的顺序错误就把它…...