当前位置: 首页 > news >正文

快速排序【hoare版】

目录

介绍

算法思路

函数实现

函数声明

确定基准值

 创建新函数

创建循环找数据(right,left)

交换左右数据

交换条件设置

外部循坏条件设置

初步总结代码

循环条件完善

内层循环的完善

外层循环的完善

相遇值大于keyi

相遇值等于keyi 

 相遇值小于keyi

确定基准值代码展示

递归左/右子序列

 ​编辑

完整代码

总结

介绍

快速排序是Hoare于1962年提出的⼀种⼆叉树结构的交换排序⽅法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两⼦序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右⼦序列重复该过程,直到所有元素都排列在相应位置上为⽌。

算法思路

1)创建左右指针,确定基准值(keyi)

2)从右向左找出比基准值小的数据,从左向右找出比基准值大的数据,左右指针数据交换,进入下次循环

//递归遍历左子序列
QuickSort(arr, left, keyi - 1);
//递归遍历右子序列
QuickSort(arr, keyi + 1, right);

函数实现

函数声明

void QuickSort(int* arr, int left, int right)

对一个数组进行快速排序时,需要利用基准值取每个数组的左子序列和右子序列,然后进行递归、排序,最后返回。函数声明部分必须包含数组地址,左子序列和右子序列。

确定基准值

如何找基准值?

right:从右到左找到比基准值小的数据

left:  从左到右找到比基准值大的数据

 创建新函数

新建一个函数 _QuickSort 来查找数组的基准值,函数参数和快速排序函数参数相同。

//用来查找基准值
int _QuickSort(int* arr, int left, int right)

创建循环找数据(right,left)

创建一个数组为 int arr[] = {6,1,2,7,9,3} ,假设当前第一个有效数据为基准值keyi,left 为 keyi 后的一个有效数据,right 为最后一个有效数据。

创建二个循环,一个使 right 指向比基准值小的数据,一个使 left 指向比基准值大的数据。在设置循环条件时,需要将 arr[right] > arr[keyi] ,arr[left] < arr[keyi] 来保证循环能够正常运行。

while(arr[right] > arr[keyi])//等于该如何操作???
{right--;//调整right位置,直到找到比arr[keyi]小的数据为止
}//离开循环说明right已经找到正确的位置while(arr[left] < arr[keyi])//等于该如何操作???
{left++;//调整left位置,直到找到比arr[keyi]大的数据为止
}//离开循环说明left已经找到正确的位置

如果当 arr[right] / arr[left] == arr[keyi] 时,该如何操作??? 

交换左右数据

当循环结束后,left 和 right 指针都找到了需要进行交换的数据,然后进行交换操作

Swap(&arr[left], &arr[right]);
//交换函数
void Swap(int* x, int* y)
{int tmp = *x;*x = *y;*y = tmp;
}

交换条件设置

如图所示,在 left 和 right 完成第一次交换后,满足 left < right 的条件,进入到第二次循环,此时 right 找到了比 keyi 小的数据,left 找到了比 keyi 大的数据,这种条件下 left 和 right 是否还需要交换数据???

left 的作用是将比 keyi 大的数据移到数组右边,right 的作用是将比 keyi 小的数据移到数组左边,图示案例明显违背了以上作用,所以在交换数据时,需要判断 left 和 right 的位置。

if (left < right)
{Swap(&arr[left], &arr[right]);
}

外部循坏条件设置

创建循环找到正确数据,并且进行交换后,只是完成了一组数据的交换,而后需要对更多的数据进行交换。

循环条件如何设置?

当 left > right 时,即right⾛到left的左侧,而 left 扫描过的数据均不大于keyi,因此 right 此时指向的数据一定不大于keyi ,所以就没有必要继续循环操作。

所以循环条件应该设置为:

while(left < right)//是否可以等于???

当小的数据都普遍位于数组左边,大的数据都普遍位于数组右边时,交换 arr[right] 和 arr[keyi] ,此时的 right 指向的就是基准值

Swap(&arr[keyi], &arr[right]);return right;//基准值下标位置

初步总结代码

将以上代码综合,得到以下函数:

int _QuickSort(int* arr, int left, int right)
{int keyi = left;++left;while (left < right)//是否可以等于??{//right从右往左找到比基准值小的数据while (arr[right] > arr[keyi]){right--;}//left从左往右找到比基准值大的数据while (arr[left] < arr[keyi]){left++;}//此时left和right都找到了相对应的数据,进行交换操作if (left < right){Swap(&arr[left], &arr[right]);}}Swap(&arr[keyi], &arr[right]);return right;//基准值下标位置
}

如代码所示,循环条件仍旧不够完善,没有考虑到等于的情况,现在我们开始完善代码。

循环条件完善

内层循环的完善

设置数组 int arr[] = {6,6,6,6,6,6} ,当数组数据全都相同时,我们假设内层循环条件 arr[right] >= arr[keyi],right 会一直往前遍历寻找比 keyi 小的数据,但是一直找不到,就会越界

所以我们在进行内层循环的设置时需要加上一个条件,left <= right

同理,当数组数据全都相同时,我们假设内层循环条件 arr[left] <= arr[keyi],left 会一直往后遍历寻找比 keyi 大的数据,但是一直找不到,就会越界

所以在用 left 找比 keyi 大的数据时,循环也需要加上,left <= right。 

//目前假设right和left所指向的数值可以等于keyi
while (left <= right && arr[right] >= arr[keyi])
{right--;
}while (left <= right && arr[left] <= arr[keyi])
{left++;
}

 以该层代码来进行快速排序,right 在内层循环后来到 keyi 的位置,left 因为大于 right 无法进入循环,交换也无法实现,跳出循环后交换 right 和 keyi 的数据,发现基准值仍在最左端。

按照如此方法递归查找,发现该数组不存在左子序列,并且时间复杂度也比较差。快速排序用二分的方法去排序,这个事例表明内存循环时 arr[right] / arr[left] 不能等于 arr[keyi]。

所以在设置内层循环时,循环条件应该为:

while (left <= right && arr[right] > arr[keyi])
while (left <= right && arr[left] < arr[keyi])

 同时那我们该如何应对当 arr[right] / arr[left] == arr[keyi] 的情况呢?

当遭遇这种情况时,我们不仅无法进入 right 调整的循环,也无法进入 left 调整的循环,但是却符合 left < right 可以进入到交换的循环当中,因为缺少了对指针的调整,所以我们需要在交换完 left 和 right 的数据后主动++和--,以此来防止以外的发生。

if (left < right)//是否可以等于??
{Swap(&arr[left++], &arr[right--]);//保证数据相等时left和right可以调整指向
}
外层循环的完善
相遇值大于keyi

在此基础上,我们再对该循环进行检查。left 和 right 在完成两次交换后到达了相遇点,如果按照原本外层循环的代码来看,当 left == right 时,应当跳出循环,最后进行 keyi  与 right 的交换,但是相遇值却大于 keyi ,将 keyi 与其交换则会发生错误,使得大于基准值的数字在基准值的左边。 

 所以在设置外层循环的条件时,我们可以将 left == right ,使其进入到循环当中,right 满足条件--,来到下标为2的位置,此时 right <left ,无法进入内层循环与交换,则与 keyi 发生交换,以此确定了基准值的位置。

while (left <= right)

相遇值等于keyi 

同理,如果当相遇值等于 keyi 时,我们可以进入到外层循环,却不能进入到内存循环,那我们只能从交换条件上入手。

我们可以利用交换函数中的调整参数来对 left 和 right 进行调整,前提是得满足 if 条件,当前 left == right ,所以我们需要将条件修改为 left <= right。 

if (left <= right)
{Swap(&arr[left++], &arr[right--]);
}
 相遇值小于keyi

相遇值小于 keyi 时,原理和相遇值大于 keyi 一样,在外层循环条件为 while(left <= right) 时,进入外层循环,right 找到最小值为相遇点数值,left 往后++寻找,不满足left <= right的条件后跳出内层循环和外层循环,将 right 与 keyi 交换,找到正确的基准值。 

确定基准值代码展示

int _QuickSort(int* arr, int left, int right)
{int keyi = left;++left;while (left <= right){//right从右往左找到比基准值小的数据//如果数组数据全部相同,则需要变更循环条件while (left <= right && arr[right] > arr[keyi])//加上条件使得基准值位置更加偏向于数组中央{right--;}//left从左往右找到比基准值大的数据while (left <= right && arr[left] < arr[keyi]){left++;}//此时left和right都找到了相对应的数据,进行交换操作if (left <= right){Swap(&arr[right--], &arr[left++]);}}Swap(&arr[keyi], &arr[right]);return right;//基准值下标位置
}

递归左/右子序列

设置一个数组,int arr[] = {6,1,2,7,9,3},进行快速排序演示。 

第一次数据交换,right上3小于6,left上7大于6

 

right上3小于6,left在++时超过right,循环停止,不满足交换条件,跳出循环,right与keyi交换数据,6成为基准值。

递归左子序列,right上2小于3,left在++时超过right,循环停止,不满足交换条件,跳出循环,right与keyi交换数据,3成为基准值。

递归左子序列,right上1小于2,left在++时超过right,循环停止,不满足交换条件,跳出循环,right与keyi交换数据,2成为基准值。

递归左子序列,right上1等于1,跳出循环,不满足交换条件,right与keyi交换数据,1成为基准值。

当我们再去递归左子序列时发现,已经没有左子序列可以进行递归了,右子序列也无法递归,原因是当1为基准值时, 不满足以下条件:

//递归遍历左子序列
QuickSort(arr, left, keyi - 1);
//递归遍历右子序列
QuickSort(arr, keyi + 1, right);

所以当 left > right 时,我们需要进行返回 。

void QuickSort(int* arr, int left, int right)
{if (left > right){return;}//确定基准值int keyi = _QuickSort(arr, left, right);//递归遍历左子序列QuickSort(arr, left, keyi - 1);//递归遍历右子序列QuickSort(arr, keyi + 1, right);
}

 递归右子序列,right上7小于9,left在++时超过right,循环停止,不满足交换条件,right与keyi交换数据,9成为基准值。

再进行递归时发现,keyi+1大于right,keyi-1小于left,不符合规律,所以递归结束。

 返回后可以发现,每次递归所得出的基准值都是每一个数字在其有序数组中应当存在的位置。

完整代码

int _QuickSort(int* arr, int left, int right)
{int keyi = left;++left;while (left <= right){//right从右往左找到比基准值小的数据//如果数组数据全部相同,则需要变更循环条件while (left <= right && arr[right] > arr[keyi])//加上条件使得基准值位置更加偏向于数组中央{right--;}//left从左往右找到比基准值大的数据while (left <= right && arr[left] < arr[keyi]){left++;}//此时left和right都找到了相对应的数据,进行交换操作if (left <= right){Swap(&arr[right--], &arr[left++]);}}Swap(&arr[keyi], &arr[right]);return right;//基准值下标位置
}//快速排序
void QuickSort(int* arr, int left, int right)
{if (left > right){return;}//确定基准值int keyi = _QuickSort(arr, left, right);//递归遍历左子序列QuickSort(arr, left, keyi - 1);//递归遍历右子序列QuickSort(arr, keyi + 1, right);
}

总结

快速排序【hoare版】运用到了递归的方法进行实现,代码数量不多,但是递归繁琐,所需要考虑的情况也分多种。对于循环条件设置和if条件设置上表现得极其严苛。

相关文章:

快速排序【hoare版】

目录 介绍 算法思路 函数实现 函数声明 确定基准值 创建新函数 创建循环找数据&#xff08;right&#xff0c;left&#xff09; 交换左右数据 交换条件设置 外部循坏条件设置 初步总结代码 循环条件完善 内层循环的完善 外层循环的完善 相遇值大于keyi 相遇值等于k…...

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台&#xff08;中断方式&#xff09; 改进&#xff08;前后台&#xff08;中断&#xff09;&#xff09;定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…...

vue中v-if和v-show的区别

文章为本菜鸡学习过程中遇到的问题记录&#xff0c;不是专业的&#xff0c;如有问题和不足还请大佬指正 >参考文章 文章目录 前言1、v-if2、v-show3、v-if和v-show的区别 前言 问题描述&#xff1a; 在完成表单验证任务的学习过程中&#xff0c;发现在使用v-show隐藏元素后…...

MacOS通过VMware Fusion安装windows 11问题汇总

环境 虚拟机&#xff0c;VMware Fusion 13.6.1本地机器&#xff0c;ARM芯片的Mac&#xff0c;系统版本14.5Windows系统镜像&#xff0c;Window11 ARM 64 bit 安装卡在WiFi连接界面 适合我本地环境的解决步骤为&#xff1a; 1、系统设置网络共享 我开启的是en5&#xff0c;这…...

Stable Diffusion的解读(二)

Stable Diffusion的解读&#xff08;二&#xff09; 文章目录 Stable Diffusion的解读&#xff08;二&#xff09;摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...

十五届蓝桥杯赛题-c/c++ 大学b组

握手问题 很简单&#xff0c;相互牵手即可&#xff0c;但是要注意&#xff0c;第一个人只能与其他49个人牵手&#xff0c;所以开头是加上49 #include <iostream> using namespace std; int main() {int cnt0;for(int i49;i>7;i--){cnti;//cout<<i<<&quo…...

NFS搭建

NFS搭建 单节点安装配置服务器安装配置启动并使NFS服务开机自启客户端挂载查看是否能发现服务器的共享文件夹创建挂载目录临时挂载自动挂载 双节点安装配置服务器安装配置服务端配置NFS服务端配置Keepalived编辑nfs_check.sh监控脚本安装部署RsyncInofity 客户端 单节点安装配置…...

【贪心算法第二弹——2208.将数组和减半的最小操作数】

1.题目解析 题目来源 2208.将数组和减半的最小操作数——力扣 测试用例 2.算法原理(贪心策略) 3.实战代码 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> hash;double sum 0.0;for(auto e : nums){hash.push(e);sum …...

ByteBuffer 与 ByteBuf 的对比与优缺点分析

在 Java 网络编程和高性能 I/O 场景中&#xff0c;ByteBuffer 和 ByteBuf 是两种重要的缓冲区处理工具。ByteBuffer 是 Java NIO 标准库的一部分&#xff0c;而 ByteBuf 是由 Netty 框架提供的增强缓冲区工具。在实际开发中&#xff0c;选择哪一种取决于场景需求和性能目标。 …...

SpringBoot 集成 html2Pdf

一、概述&#xff1a; 1. springboot如何生成pdf&#xff0c;接口可以预览可以下载 2. vue下载通过bold如何下载 3. 一些细节&#xff1a;页脚、页眉、水印、每一页得样式添加 二、直接上代码【主要是一个记录下次开发更快】 模板位置 1. 导入pom包 <dependency><g…...

【IDEA】插件篇

环境&#xff1a;Mac M &#xff0c;IDEA 2024.2.4 一、汉化 & 汉化后转回英文 1、汉化 IntelliJ IDEA -> Preferences -> Plugins -> MarketPlace&#xff0c;输入 chinese&#xff0c;点击 安装&#xff0c;安装完成后 重启IDE 2、汉化后转回英文 IntelliJ …...

librdns一个开源DNS解析库

原文地址&#xff1a;librdns一个开源DNS解析库 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 介绍 librdns是一个开源的异步多功能插件式的解析器&#xff0c;用于DNS解析。 源代码地址&#xff1a;GitHub - vstakhov/librdns: Asynchrono…...

数据结构 【带环单链表】

在单链表中可能会存在一种情况&#xff0c;某一结点在经过几次转移之后回到了自己本身&#xff0c;这种情况就称之为带环链表。对于带环链表&#xff0c;我们不能轻易对其进行遍历&#xff0c;遍历可能会导致产生死循环。 带环链表的逻辑图如下所示&#xff1a;&#xff08;这…...

CodiMD导出pdf失败或无中文

CodiMD导出pdf失败&#xff0c;弹出文件保存窗口&#xff0c;有个pdf文件能下载&#xff0c;但是保存的时候提示“网站出问题了”&#xff0c;实际到服务器上看会发现docker崩溃了。 解决办法&#xff1a; 使用最新的CodiMD镜像&#xff0c;如nabo.codimd.dev/hackmdio/hackmd:…...

基于Java Springboot高校教务管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…...

Python 快速入门(上篇)❖ Python基础知识

Python 基础知识 Python安装**运行第一个程序:基本数据类型算术运算符变量赋值操作符转义符获取用户输入综合案例:简单计算器实现Python安装** Linux安装: yum install python36 -y或者编译安装指定版本:https://www.python.org/downloads/source/ wget https://www.pyt…...

JAVA实现将PDF转换成word文档

POM.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…...

Python学习29天

二分查找 # 定义函数冒泡排序法从大到小排列 def bbble_sort(list):# i控制排序次数for i in range(len(list) - 1):# j控制每次排序比较次数for j in range(len(list) - 1 - i):if list[j] < list[j 1]:list[j], list[j 1] list[j 1], list[j] # 定义二分查找函数 def…...

FreeSWITCH 简单图形化界面35 - 使用python脚本

FreeSWITCH 简单图形化界面35 - 使用python脚本 测试环境1、mod_python编译2、Python编写拨号规则(dialplan)测试一下不带参数带参数 3、使用Python执行freeSWITCH的API测试一下 4、Python执行session API测试一下 5、Python编写聊天规则(chatplan)测试一下 6、Python执行messa…...

基于AIRTEST和Jmeter、Postman的自动化测试框架

基于目前项目和团队技术升级&#xff0c;采用了UI自动化和接口自动化联动数据&#xff0c;进行相关测试活动&#xff0c;获得更好的测试质量和测试结果。...

web-03

CSS回顾 选择器 标签选择器 标签{}ID选择器 标签中定义ID属性。 #ID值{}类选择器 标签中使用class属性 .类名{}关于DIV/span div任意的大小的长方形&#xff0c;大小css&#xff1a; width, height控制。—换行 span-- 一行内 CSS常用属性 width/height 宽度/高度 定义&…...

MySQL 死锁

一、引言 在 MySQL 数据库的使用过程中&#xff0c;死锁问题就像一颗隐藏在暗处的 “定时炸弹”&#xff0c;平时可能感觉不到它的存在&#xff0c;但一旦触发&#xff0c;就可能导致数据库事务无法正常推进&#xff0c;严重影响系统的性能和可用性。对于开发人员和数据库管理员…...

M|大脑越狱

rating: 7.0 豆瓣: 7.6 上映时间: “2015” 类型: M悬疑 导演: 约瑟夫怀特 Joseph White 主演: 亚历山大欧文 Alexander Owen爱德华富兰克林 Edward Franklin 国家/地区: 英国 片长/分钟: 20分钟 M&#xff5c;大脑越狱 想法不错&#xff0c;但是逻辑比较一般。属于…...

CSS3_媒体查询(十一)

CSS3_响应式布局 1、媒体样式 在不同媒体上显示不同的样式。 常用阈值&#xff1a; 小于768px&#xff1a;小屏幕&#xff1b;768px-992px&#xff1a;中等屏幕&#xff1b;992px-1200px&#xff1a;大屏幕&#xff1b;大于1200px&#xff1a;超大屏幕。 <!DOCTYPE html>…...

Spring |(四)IoC/DI配置管理第三方bean

文章目录 &#x1f4da;数据源对象管理&#x1f407;环境准备&#x1f407;实现Druid管理&#x1f407;实现C3P0管理 &#x1f4da;加载properties文件&#x1f407;第三方bean属性优化&#x1f407;读取单个属性 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMa…...

Qt桌面应用开发 第六天(鼠标事件 定时器事件 定时器类 事件分发器 事件过滤器)

目录 1.1鼠标进入和离开enterEvent\leaveEvent 1.2鼠标按下释放和移动mousePressEvent\mouseReleaseEvent\mouseMoveEvent 1.3定时器事件timerEvent 1.4定时器类QTimer 1.5事件分发器event 1.6事件过滤器eventFilter 1.1鼠标进入和离开enterEvent\leaveEvent 事件&#x…...

MySQL-存储过程

目录 一、存储过程定义 二、存储过程创建 1、变量的定义 2、存储过程的分支语句 2.1 双分支IF语句 2.2 多分支IF语句 3、存储过程的循环语句 三、存储过程调用 四、存储过程显示和删除 一、存储过程定义 存储过程&#xff08;Stored Procedure&#xff09;是一种在数…...

数据指标与标签在数据分析中的关系与应用

导读&#xff1a;分享数据指标体系的文章很多&#xff0c;但讲数据标签的文章很少。实际上&#xff0c;标签和指标一样&#xff0c;是数据分析的左膀右臂&#xff0c;两者同样重要。实际上&#xff0c;很多人分析不深入&#xff0c;就是因为缺少对标签的应用。今天系统的讲解下…...

LWE详细介绍

LWE问题&#xff0c;即学习误差问题&#xff08;Learning With Errors problem&#xff09;&#xff0c;是密码学中一个重要的硬问题&#xff0c;尤其在后量子密码学中占有核心地位。LWE问题由Regev在2005年提出&#xff0c;其设计基于格理论&#xff0c;被认为是一个在平均情况…...

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

目录 ⛳️推荐 前言 1. 安装docker与docker-compose 2. 启动容器运行镜像 3. 本地访问测试 4.安装内网穿透 5. 创建公网地址 6. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…...

【Spring MVC】初步了解Spring MVC的基本概念与如何与浏览器建立连接

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的基础概念&#xff0c;以及如何实现与浏览器的连接&#xff0c;参数的传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …...

游戏AI实现-决策树

代码实现&#xff1a; 定义一个决策树节点 class DecisionTreeNode{public DecisionTreeNode(){} } 定义一个行为类&#xff1a; class Action : DecisionTreeNode{ } 定义一个决策类&#xff1a; class Decision : DecisionTreeNode{ } 应用&#xff1a; 参考书…...

9个最佳WordPress PDF插件(查看器、嵌入和下载)

在过去的几年里&#xff0c;我们一直在使用不同的 PDF 插件在我们的网站上创建、编辑和嵌入文档。 然而&#xff0c;经过多次尝试和错误&#xff0c;我们意识到并不是每个插件都是相同的。事实上&#xff0c;为您的企业或电子商务网站选择合适的 PDF 插件可能是一项艰巨的任务…...

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型&#xff0c;对应数据库中varchar类型&#xff0c;除了通用类型外接收另外两个参数&#xff1a; size: 字符长度&#xff0c;超出的长度将被截断 trim: 默认True&#xff0c;是否字段值应该被去空白。 Text 文本类型&#xff0c;对应数据库…...

VUE 指令 事件绑定,.stop阻止冒泡

1、VUE 的模板语法和指令 目的增强html的功能 所有的指令以自定义属性的方式去写 v-xxx ,指令就是vue提供给我们能够更方便将数据和页面展示出来的操作&#xff0c;具体就是以数据去驱动DOM ,简化DOM操作的行为。 2、内容渲染指令 ① {{}} 模板渲染&#xff08;模板引擎&am…...

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表&#xff0c;录入的日期格式很混乱&#xff0c;有些看着差不多&#xff0c;但实际多一个空格少一个字符很难发现&#xff0c;希望的理想格式是 1980-01-01&#xff0c;10位&#xff0c;即&#xff1a;“YYYY-mm-dd”&#xff0c;实际上数据表中这样的格式都有 19…...

webpack基础配置

文章目录 一、默认入口和默认出口二、资源配置三、输出文件3.1 多文件入口3.2 HtmlWebpackPlugin插件 四、环境4.1 环境变量4.2 热更新 五、代码分离5.1 公共模块5.2 懒加载5.3 预获取/预加载模块 六、缓存七、Tree Shaking八、公共路径 webpack 是一个用于现代 JavaScript 应用…...

stm32利用LED配置基础寄存器+体验滴答定时器+hal库环境配置

P1 LED控制与流水灯效果实现 概述 大家好&#xff0c;今天我们来学习一下如何在STM32上控制LED灯&#xff0c;并且实现一个流水灯的效果。这不仅是一个基础的实践&#xff0c;也是嵌入式开发中非常常见的需求。 LED控制 1. LED初始化 首先&#xff0c;我们需要对LED灯对应…...

Spark RDD sortBy算子执行时进行数据 “采样”是什么意思?

一、sortBy 和 RangePartitioner sortBy 在 Spark 中会在执行排序时采用 rangePartitioner 进行分区&#xff0c;这会影响数据的分区方式&#xff0c;并且这一步骤是通过对数据进行 “采样” 来计算分区的范围。不过&#xff0c;重要的是&#xff0c;sortBy 本身仍然是一个 tr…...

Ubuntu24.04下的docker问题

按官网提示是可以安装成功的&#xff0c;但是curl无法使用https下载&#xff0c;会造成下述语句执行失败 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https…...

Tri Mode Ethernet MAC IP核详解

本文对 Vivado 的三速 MAC IP 核&#xff08;Tri Mode Ethernet MAC&#xff0c;TEMAC&#xff09;进行介绍。 在自行实现三速以太网 MAC 控制器时&#xff0c;GMII/RGMII 接口可以通过 IDDR、ODDR 原语实现&#xff0c;然而实际使用中自己实现的模块性能不是很稳定&#xff08…...

【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G

「【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G」 复制下方口令&#xff0c;打开最新版「夸克APP」即可获取保存&#xff08;防止和谐&#xff01;&#xff01;&#xff01;&#xff09; 口令&#xff1a; 动作懿范鉴真渡多好备用口令&#xff1a; /~19dc35…...

android 实现答题功能

一、效果 二、实现思路 1、界面实现 实现起来其实不难&#xff0c;首先我们可以看到&#xff0c;界面是由答题进度、题目、选项ABCD组成&#xff0c;现在就是要考虑实现方式&#xff0c;答题进度可以使用Textviewprogressbar实现&#xff0c;题目直接使用Textview&#xff0c;…...

JSONP处理跨域请求

JSONP 背景 由于浏览器存在安全策略&#xff0c;所以当访问的请求中的协议、域名、端口其中一个与本站不同时就会形成跨域&#xff0c;这里介绍一种比较简单的方案——jsonp。 原理 浏览器对 script、img这些带有src属性的的标签在发送请求时是不会触发跨域的校验&#xff…...

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号&#xff0c;由内而外&#xff0c;转向用栈解决。使用两个栈处理&#xff0c;一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…...

华为手机启用ADB无线调试功能

打开开发者模式,勾选USB调试,和“仅充电”模式下允许ADB调试 确认 设置添加adb路径到PATH变量 使用adb查看安卓设置 切换为无线模式: 查看手机IP...

HTML 元素类型介绍

目录 1. 块级元素&#xff08;Block-level Elements&#xff09; 2. 行级元素&#xff08;Inline Elements&#xff09; 3. 行内块级元素&#xff08;Inline-block Elements&#xff09; 4. 表格相关元素 5. 列表相关元素 6. 表单相关元素 示例代码 示例效果 ​编辑 …...

前端反向代理的配置和實現

反向代理是位於客戶端和服務器之間的一個中間層&#xff0c;它代表客戶端向伺服器發起請求&#xff0c;然後將伺服器的回應返回給客戶端。與傳統的正向代理不同&#xff0c;反向代理是由伺服器端配置的&#xff0c;客戶端通常不知道它的存在。在前端開發中&#xff0c;反向代理…...

日志分析工具

一、nginx_log_analysis工具 1、工具下载&#xff0c;http://linux5588.blog.51cto.com/&#xff0c;它是用python语言写的&#xff0c;只是用来分析nginx日志&#xff0c;它的输出比较简单&#xff0c;以IP为主&#xff0c;可以查看每个IP的访问的流量&#xff0c;次数&#…...