【数据结构】八大排序
目录
一、直接插入排序
二、希尔排序
三、选择排序
四、堆排序
五、冒泡排序
六、快速排序
七、归并排序
八、计数排序
稳定性结论
稳定性:排序后相同元素之间的相对顺序是否保持不变。
一、直接插入排序
基本思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
每次指向后一个元素,临时保存后一个元素temp,将大于该temp的元素后移,在第一个小于等于temp的后一个位置插入temp。
func InsertSort(arr []int) []int {for i := 0; i < len(arr)-1; i++ {temp := arr[i+1]end := ifor end >= 0 {if arr[end] > temp {arr[end+1] = arr[end]end--} else {break}arr[end+1] = temp}}return arr
}
二、希尔排序
希尔排序(Shell Sort)是一种基于插入排序的改进算法,由D.L. Shell于1959年提出。它通过引入一个“增量”(gap)的概念来对插入排序进行优化,使得插入排序在处理大规模数据集时效率更高。
基本思想:
将待排序的记录序列分割成若干子序列,每个子序列的元素之间相隔一个特定的“增量”。这些子序列分别进行直接插入排序,随着增量逐渐减小,子序列的间隔也越来越小,直至增量为1,此时整个序列作为一个表来处理,完成排序。
时间复杂度:O(n^1.3)
空间复杂度:O(1)
稳定性:不稳定
在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
func ShellSort(arr []int) []int {gap := len(arr)for gap > 1 {gap /= 2for i := 0; i < len(arr)-gap; i++ {temp := arr[i+gap]end := ifor end >= 0 {if arr[end] > temp {arr[end+gap] = arr[end]end -= gap} else {break}arr[end+gap] = temp}}}return arr
}
三、选择排序
基本思想:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置。
假设指针i对应的元素最小,然后选出i之后数组中的最小元素下标,和i交换
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
举例:序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
func SelectSort(arr []int) []int {for i := 0; i < len(arr)-1; i++ {minIndex := ifor j := i + 1; j < len(arr); j++ {if arr[j] < arr[minIndex] {minIndex = j//select}}arr[i], arr[minIndex] = arr[minIndex], arr[i]//swap}return arr
}
四、堆排序
堆是什么?
堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个结点的值总是不大于或不小于其父结点的值;
堆总是一棵完全二叉树。
完成二叉树是什么?
在完全二叉树中,除了最后一层,其他各层的节点数都达到了最大个数,而最后一层的节点则都连续集中在最左边1。
基本思想:
- 建立最大堆:将无序序列构建成一个最大堆,即每个父节点的值都大于或等于其子节点的值。
- 交换堆顶元素与末尾元素:将堆顶元素(最大值)与末尾元素交换,然后将最大值“沉”到堆的末尾。
- 重新调整堆:重新对堆进行调整,使其满足最大堆的性质。
- 重复上述过程:重复步骤2和3,直到堆的大小为1。
C++ algorithm库大根堆实现升序排序:
std::vector<int> arr={1,2,3,41,43,44,6,75,634,5,234,4,21};
std::make_heap(arr.begin(),arr.end());
for(int i=arr.size()-1;i>0;i--)
{swap(arr[i],arr[0]);//最大的数交换到尾部auto last=arr.end()+i-arr.size();//缩小建队范围std::make_heap(arr.begin(),last);//再次保持堆
}
C++ algorithm库小根堆实现降序排序:
std::vector<int> arr={1,2,3,41,43,44,6,75,634,5,234,4,21};
std::make_heap(arr.begin(),arr.end(),std::greater<int>());
for(int i=arr.size()-1;i>0;i--)
{swap(arr[i],arr[0]);auto last=arr.end()+i-arr.size();std::make_heap(arr.begin(),last,std::greater<int>());
}
C++STL库priority_queue实现大根堆排序:
std::vector<int> arr={1,2,3,41,43,44,6,75,634,5,234,4,21};
std::priority_queue<int> que(arr.begin(),arr.end());
for(int i=arr.size()-1;i>=0;i--){arr[i]=que.top();que.pop();
}
C++STL库priority_queue实现小根堆排序:
std::vector<int> arr={1,2,3,41,43,44,6,75,634,5,234,4,21};
std::priority_queue<int,std::vector<int>,std::greater<int>> que(arr.begin(),arr.end());
for(int i=arr.size()-1;i>=0;i--){arr[i]=que.top();que.pop();
}
golang手动实现
递归建堆:
实际是一个大元素上升的一个过程
func Heapify(arr []int, n, fatherIndex int) {bigIndex := fatherIndex//计算公式//左结点:i*2+1//右结点:i*2+2leftIndex := fatherIndex*2 + 1rightIndex := fatherIndex*2 + 2if leftIndex < n && arr[leftIndex] > arr[bigIndex] {bigIndex = leftIndex}if rightIndex < n && arr[rightIndex] > arr[bigIndex] {bigIndex = rightIndex}if bigIndex != fatherIndex {arr[fatherIndex], arr[bigIndex] = arr[bigIndex], arr[fatherIndex] //swapHeapify(arr, n, bigIndex)}
}
排序:
func HeapSort(arr []int) []int {//建堆//最后一个父结点为最后一个元素的父亲,最后一个元素为len(arr)-1//父节点计算公式:(i-1)/2//最后一个父节点之前的索引均为父节点,向前遍历for i := ((len(arr) - 1) - 1) / 2; i >= 0; i-- {Heapify(arr, len(arr), i)}//排序for i := len(arr) - 1; i > 0; i-- {arr[i], arr[0] = arr[0], arr[i] //将最大的数交换到尾部Heapify(arr, i, 0)}return arr
}
时间复杂度:O(n*log(n))
空间复杂度:O(1)
稳定性:不稳定
五、冒泡排序
、
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历待排序的数列,比较每对相邻元素,并在必要时交换它们的位置。这个过程会重复进行,直到没有再需要交换的元素为止,这意味着数列已经排序完成。
func BubbleSort(arr []int) []int {for i := len(arr) - 1; i > 0; i-- {for j := 0; j < i; j++ {if arr[j] > arr[j+1] {arr[j], arr[j+1] = arr[j+1], arr[j]}}}return arr
}
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
六、快速排序
快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一个称为“基准”(pivot)的元素将数组分为两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素,然后递归地对这两个子数组进行快速排序。
基本思想:
-
选择基准:从数组中选择一个元素作为基准(pivot)。选择基准的方法可以有多种,常见的有随机选择、选择第一个元素、选择最后一个元素或选择中间元素。
-
分区操作(Partitioning):重新排列数组,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。在这个分区退出之后,该基准就处于数组的中间位置。
-
递归排序:递归地将小于基准值元素的子数组和大于基准值元素的子数组排序。
分区:
func partition(arr []int, begin, end int) int {pivot := arr[end] //随便选的数i := beginfor j := begin; j < end; j++ {if arr[j] < pivot {arr[i], arr[j] = arr[j], arr[i] //swapi++}}arr[i], arr[end] = arr[end], arr[i]return i
}
递归排序:
func qsort(arr []int, begin, end int) {if begin < end {mid := partition(arr, begin, end)qsort(arr, begin, mid-1)qsort(arr, mid+1, end)}
}
快速排序入口:
func QuickSort(arr []int) []int {qsort(arr, 0, len(arr)-1)return arr
}
时间复杂度:O(N*log(N))
空间复杂度:O(log(N))
稳定性:不稳定
对[3, 3, 3, 4]进行分区,选择最后一个元素4作为基准,那么4会和第一个3调换位置,导致3之间的顺序变化。
七、归并排序
归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
基本思想:
- 分解:将原始数组分成两个等大小(或几乎等大小)的子数组。
- 递归:递归地将每个子数组进行归并排序。
- 合并:将两个排序好的子数组合并成一个最终的排序数组。
递归分解直到单个元素(单个元素一定有序):
func msort(arr []int, temp []int, left, right int) {if left < right {mid := (left + right) / 2msort(arr, temp, left, mid)msort(arr, temp, mid+1, right)merge(arr, temp, left, mid, right)}
}
合并左右两个有序的数组:
func merge(arr []int, temp []int, left, mid, right int) {//双指针合并有序数组l_index := leftr_index := mid + 1temp_index := leftfor l_index <= mid && r_index <= right {if arr[l_index] < arr[r_index] {temp[temp_index] = arr[l_index]temp_index++l_index++} else {temp[temp_index] = arr[r_index]temp_index++r_index++}}for l_index <= mid {temp[temp_index] = arr[l_index]temp_index++l_index++}for r_index <= right {temp[temp_index] = arr[r_index]temp_index++r_index++}//temp copy to arrfor left <= right {arr[left] = temp[left]left++}
}
入口函数:
func MergeSort(arr []int) []int {temp := make([]int, len(arr))msort(arr, temp, 0, len(arr)-1)return arr
}
时间复杂度:O(N*log(N))
空间复杂度:O(N)
稳定性:稳定
八、计数排序
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序)
基本思想:
- 计算范围:首先确定数组中最大和最小的元素,从而确定排序时需要的“桶”的数量。
- 计数:创建一个计数数组,长度为最大值加1。遍历待排序数组,对于数组中的每个元素,在计数数组中对应的位置加1。
- 累加:将计数数组中的每个元素转化为累加和,这样每个元素的位置就表示了该元素在排序后数组中的位置。
- 输出排序结果:根据累加后的计数数组,重新构建排序后的数组。
func CountSort(arr []int) []int {if len(arr) < 1 {return []int{}}max := arr[0]min := arr[0]for i := 1; i < len(arr); i++ {if arr[i] > max {max = arr[i]}if arr[i] < min {min = arr[i]}}count := make([]int, max+1)//计数for i := 0; i < len(arr); i++ {count[arr[i]]++}//统计累积值for i := min + 1; i < max+1; i++ {count[i] += count[i-1]}res := make([]int, len(arr))//将元素放到正确的位置for i := 0; i < len(arr); i++ {res[count[arr[i]]-1] = arr[i]count[arr[i]]--}return res
}
时间复杂度:O(N+K)//K为max-min+1
空间复杂度:O(K)
稳定性:不稳定
通过这个元素的个数排序,已经失去相同元素的位置信息
稳定性结论
稳定的排序:直接插入排序,冒泡排序,归并排序
不稳定的排序:希尔排序、选择排序、堆排序、快速排序、计数排序
相关文章:
【数据结构】八大排序
目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、计数排序 稳定性结论 稳定性:排序后相同元素之间的相对顺序是否保持不变。 一、直接插入排序 基本思想:通过构建有序序列ÿ…...
mmdetection:图片推理以及将预测标签转换为YOLO格式标签
本文记录了使用 mmdetection 进行图片推理,并将推理结果坐标格式转换为yolo格式保存在txt中的代码。 文章目录 一、图片推理二、批量处理 一、图片推理 一个图片推理的demo。 import os import mmcv from mmdet.apis import init_detector, inference_detector fr…...
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
论文标题 An Empirical Study of Scaling Law for OCR OCR 缩放定律的实证研究 论文链接: An Empirical Study of Scaling Law for OCR论文下载 论文作者 Miao Rang, Zhenni Bi, Chuanjian Liu, Yunhe Wang, Kai Han 内容简介 本论文在光学字符识别…...
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,原因主要包括: 历史发展的随意性:Python发展早期对于依赖管理的重视程度不足,缺乏从一开始就进行统一规划和设计的意识 社区的分散性:Python社区庞大且分散,众多开发…...
【系统】Windows11更新解决办法,一键暂停
最近的windows更新整的我是措不及防,干啥都要关注一下更新的问题,有的时候还关不掉,我的强迫症就来了,非得关了你不可! 经过了九九八十一难的研究之后,终于找到了一个算是比较靠谱的暂停更新的方法&#x…...
小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书
小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书 一、下载影刀: https://www.winrobot360.com/share/activity?inviteUserUuid595634970300317698 二、加入应用市场 https://www.yingdao.com/share/accede/?inviteKeyb2d3f22a-fd6c-4a…...
【原生js案例】前端封装ajax请求及node连接 MySQL获取真实数据
上篇文章,我们封装了ajax方法来请求后端数据,这篇文章将介绍如何使用 Node.js 来连接 MySQL,并对数据库进行操作。 实现效果 代码实现 后端接口处理 const express require("express"); const connection require("../da…...
Ubuntu将深度学习环境配置移植到新电脑
这里默认新电脑已经安装好了conda、CUDA这些,可以直接创建新的虚拟环境。 参考链接: https://blog.csdn.net/Chujun123528/article/details/143788565https://blog.csdn.net/qq_41779275/article/details/122868946https://blog.csdn.net/YajunLin/art…...
vue基础作业实验十
vue基础作业实验十 实验要求案例要点:代码以及思考style部分Vue.js 部分Vue 实例部分 这段代码是一个基于 Vue.js 的静态页面,功能包括商品品牌的添加、删除和搜索。 实验要求 一、实验的基本内容 (1)Vue模板语法。 (…...
冒泡排序(JAVA)
package com.guangyunl.f_array;import java.util.Random; import java.util.Scanner;// 数组的冒泡排序 // 冒泡排序法是采用数组中相邻元素进行比较换位 public class Demo02Bubble {public static void main(String[] args) {Demo02Bubble demo02Bubble new Demo02Bubble()…...
如何测量分辨率
一、什么是分辨率? 分辨率指的是分清物体细节的能力。分辨率是一个成像系统还原空间频率的能力。一些人只是简单的用分辨率去描述极限分辨率,但是相机在在不同的对比度的情况下还原低,中和高频率的能力,也可以显示全面综合的信息。…...
【Mysql索引优化】索引优化的最佳实现
文章目录 【Mysql优化】索引优化的最佳实现1. 全值匹配:索引的最佳使用方式2. 最左前缀法则3. 尽量使用覆盖索引:优化查询性能。减少 select \* 语句4. 范围查询优化5. 不在索引列上做任何操作(计算、函数、(自动or手动࿰…...
centos使用mkisofs构建无人值守镜像(附官方学习文档)
安装mkisofs yum install -y mkisofs 挂载镜像并确认 并拷贝文件(/mnt 为我们的工作目录) 1.3 准备自动应答文件(保存为 ins.ks) 修改系统引导 实际上就是添加inst.ks 这个引导参数 传递应答文件 传统模式引导 UEFI模式引导 打包镜像 通用选项 -v:启用详细模式&a…...
Python获取当前系统中可用的串口设备
import serial.tools.list_portsdef checkDevice(self):port_data []for port in serial.tools.list_ports.comports():port_data.append(port.description)if port_data:for devInfo in port_data:self.toolLogPrinting(可用设备 devInfo)RET Trueelse:self.toolLogPrinti…...
基于蓝牙通信的手机遥控智能灯(论文+源码)
1.系统设计 灯具作为人们日常生活的照明工具为人们生活提供光亮,本次基于蓝牙通信的手机遥控智能灯设计功能如下: (1)用户可以通过蓝牙通信模块的作用下,在手机端遥控切换智能灯不同的工作模式; &#x…...
【Prometheus 】【实战篇(五)】深入解析 Prometheus 监控指标类型:Counter、Gauge、Histogram 和 Summary
Prometheus 提供了四种核心的指标类型,分别是 Counter(计数器)、Gauge(仪表)、Histogram(直方图)和 Summary(摘要)。这些指标类型在客户端库中有具体的使用说明ÿ…...
进程间通信方式---消息队列(System V IPC)
进程间通信方式—消息队列(System V IPC) 文章目录 进程间通信方式---消息队列(System V IPC)消息队列1.消息队列进程间通信原理2.msgget 系统调用3.msgsnd 系统调用4.msgrcv 系统调用5.msgctl 系统调用6.函数使用案例7.实现生产者…...
【笔记】深度学习模型评估指标
推荐链接: (0)多分类器的评价指标 (1)泛化误差的评价方法:【机器学习】模型评估与选择(留出法、交叉验证法、查全率、查准率、偏差、方差) (2)机器学习&…...
Python语法之列表(包含检测练习)
看完后有没有学会呢?主页有一个列表知识小检测^V^ 关注我更新更多初学实例 主页还有字典的,这个系列会持续更新 列表 列表中的查找数据(index,count,len) 一 列表的格式 【数据1,数据2, 】 index():返回指定数据…...
气象与旅游之间的关系,如果借助高精度预测提高旅游的质量
气象与旅游之间存在密切的关系,天气条件直接影响旅游者的出行决策、旅游体验和安全保障。通过高精度气象预测技术,可以有效提升旅游质量,为游客和旅游行业带来显著的优势。 1. 提高游客出行决策效率 个性化天气服务:基于高精度气象预测,旅游平台可以提供个性化的天气预报服…...
JVM(Java虚拟机)分区详情
JVM(Java虚拟机)运行时数据区是Java虚拟机的内存管理模型,它包括了多个关键的内存区域,这些区域各自承担着不同的职责,共同支持着Java程序的运行。以下是JVM运行时数据区的详细介绍: 一、整体概述 JVM运行时数据区按照线程占用的情况可以分为两类:线程共享和线程独享。…...
计算机组成原理的学习笔记(2)--数据表示与运算·其二 逻辑门和加减乘
学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。 1. 逻辑门 逻辑门是数字电路中用于执行基本逻辑运算的组件。每种逻辑门都有独特的功能和特性: 与门(AND Gate): 符号࿱…...
数据科学与SQL:如何利用本福特法则识别财务数据造假?
目录 0 本福特法则介绍 1 数据准备 2 问题分析 步骤1:提取首位数: 步骤2:计算首位数字的实际频率分布 <...
Mapbox-GL 的源码解读的一般步骤
Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...
常见网络命令
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 常见网络命令 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 Ping 命令 …...
Ubuntu上如何部署Nginx?
环境: Unbuntu 22.04 问题描述: Ubuntu上如何部署Nginx? 解决方案: 在Ubuntu上部署Nginx是一个相对简单的过程,以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…...
微店商品详情API:获取商品信息的高效途径
引言 在电商领域,获取商品详情是开发者和商家进行数据分析、精准营销和店铺管理的重要一环。微店作为知名的电商平台,提供了丰富的API接口供开发者使用,其中商品详情API接口尤为关键。本文将详细介绍如何使用微店API接口获取商品详情&#x…...
编程语言注释的方式
Python 单行注释 # 这是一个单行注释多行注释(本质上是跨行字符串) 这是一个多行注释的示例。它可以跨越多行。 """这是一个多行注释的示例。它可以跨越多行。 """ C 单行注释 // 这是一个单行注释 多行注释 /*这是…...
抓住节假日的机会调整ASO优化策略
节日季和全年的特殊活动为提高应用程序的知名度和下载量提供了独特的机会。忽略节假日意味着错过这些有限的扩大用户群的机会。相反,调整您的应用商店优化 (ASO) 策略以适应这些高流量时段至关重要。以下是如何在假期期间最大限度地提高应用程序的性能。 一、为什么…...
AOI外观缺陷检测机
主要功能: 快速检测产品装配缺陷,包括螺丝、元器件、端子排线、二维码、一维条码、识别读码、产品外观 Logo缺陷以及产品标签、字符缺陷检测等产品的缺陷检测。 设备优势:1.采用轻型可移动支架,可以快速对接产线工艺工序&am…...
BERT模型
目录 1.BERT介绍2.BERT框架2.1 Embedding2.2 Transformer Encoder 3.BERT可视化4.注意力六种模式4.1 模式1:注意下一个词4.2 模式2:注意前一个词4.3 模式3:注意相同或相关的单词4.4 模式4:注意“其他”句子中相同或相关词4.5 模式…...
Ubuntu22.04上安装esp-idf
一、安装准备# 建议使用Ubuntu 20.04 或 Ubuntu 22.04 操作系统 为了在 Ubuntu 22.04 中使用 esp-idf,需要安装一些依赖包 sudo apt-get install git wget flex bison gperf python3\python3-pip python3-venv cmake ninja-build ccache\libffi-dev libssl-dev dfu…...
Synchronous Serial Port 协议详解
1、简介 Synchronous Serial Port (SSP) ,基于下图文档的设计标准 1.1、包含3种数据帧格式: a Motorola SPI-compatible interface(以下简称SPI)a Texas Instruments synchronous serial interface(简写SSIÿ…...
BSM和BMS什么区别?
BSM BSM(Battery System Manager)是指用于管理和控制电动车辆的电池系统的设备,其功能包括监测电池状态、控制充放电过程、保护电池安全等。 BMS BMS(Battery Management System)是指用于监测、控制和保护电池组的设…...
基于海思soc的智能产品开发(巧用mcu芯片)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于开发车规级嵌入式软件的同学来说,socmcu这样的组合,他们并不陌生。但是传统的工业领域,比如发动机、医疗或…...
R语言混合模型回归GBTM群组轨迹模型绘图可视化研究
全文链接:https://tecdat.cn/?p38581 在回归分析的广袤领域中,面对具有多条未知函数线的复杂数据时,传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生,其在处理此类复杂情境时展现出独特的优势与潜力(…...
Flink2.0未来趋势中需要注意的一些问题
手机打字,篇幅不长,主要讲一下FFA中关于Flink2.0的未来趋势,直接看重点。 Flink Forward Asia 2024主会场有一场关于Flink2.0的演讲,很精彩,官方也发布了一些关于Flink2.0的展望和要解决的问题。 1.0时代和2.0时代避免…...
android recycleview 中倒计时数据错乱
原因 recyceleview 当页面划出屏幕外后,默认会有两条进入缓存区,这些item的结构会被保存,数据被清除,方便其他新进入屏幕的数据复用item,超过两条外的item会进入缓存池被完全销毁重用。 如果我们的页面上有editText 或…...
康冠科技嵌入式面试题及参考答案
LCD 驱动你自己做了哪些内容? 在 LCD 驱动开发中,首先是硬件层面的理解。需要仔细研究 LCD 的数据手册,明确其引脚定义,包括电源引脚、数据引脚、控制引脚等。比如,对于常见的 RGB 接口 LCD,要清楚哪几个引脚是用于传输红、绿、蓝三种颜色的数据,以及像 VSYNC(垂直同步…...
FreeRTOS的任务调度
1.启动任务调度器 vTaskStartScheduler void vTaskStartScheduler( void ) { BaseType_t xReturn;/* Add the idle task at the lowest priority. */#if ( INCLUDE_xTaskGetIdleTaskHandle 1 ){/* Create the idle task, storing its handle in xIdleTaskHandle so it canbe …...
scala中模式匹配的应用
package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息,匹配到对应的类// 注意:// 1 匹配的时候,case class的属性个数要对上// 2 属性名不需…...
基于Springboot人口老龄化社区服务与管理平台【附源码】
基于Springboot人口老龄化社区服务与管理平台 效果如下: 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧,老年人口比例逐渐增加,对老年…...
前端生成docx文档、excel表格、图片、pdf文件
一、前端将页面某区域内容下载为word文档:html-to-docx、file-saver插件组合使用 import HTMLtoDOCX from html-to-docx; import { saveAs } from file-saver;const exportTest async () > {const fileBuffer await HTMLtoDOCX(<h2>文件标题</h2>&…...
Ubantu22系统安装Miniconda3
1、Anaconda和Miniconda异同 清华源镜像的Miniconda3和Anaconda都是用于管理Python环境和软件包的工具,但它们之间存在一些关键的不同之处。下面将分别介绍它们的特点以及使用清华源镜像的差异。 相同点: (1)功能相似:…...
详细解读TISAX认证的意义
详细解读TISAX认证的意义,犹如揭开信息安全领域的一颗璀璨明珠,它不仅代表了企业在信息安全管理方面的卓越成就,更是通往全球汽车供应链信任桥梁的关键一环。TISAX,即“Trusted Information Security Assessment Exchange”&#…...
kubeadm_k8s_v1.31高可用部署教程
kubeadm_k8s_v1.31高可用部署教程 实验环境部署拓扑图**部署署架构****Load Balance****Control plane node****Worker node****资源分配(8台虚拟机)**集群列表 前置准备关闭swap开启ipv4转发更多设置 1、Verify the MAC address and product_uuid are u…...
MyBatis写法汇总
Mybatis写法汇总 1. 批量操作 1.1 批量插入 <insert id"batchInsert" parameterType"java.util.List">INSERT INTO user (username, password, create_time) VALUES<foreach collection"list" item"item" separator"…...
【C++】优先级队列以及仿函数
本篇我们来介绍一下优先级队列 priority_queue 。优先级队列的底层是数据结构中的堆,在C中它是一个容器适配器,这个容器适配器比之前的栈和队列更复杂。 1.priority_queue的介绍 1.1 优先级队列的底层 因为优先级队列就是堆,堆的底层是数组…...
【VUE】13、安装nrm管理多个npm源
nrm(npm registry manager)是一个 npm 源管理器,它允许用户快速地在不同的 npm 源之间进行切换,以提高包管理的速度和效率。以下是对 nrm 使用的详细介绍: 1、安装nrm 在使用 nrm 之前,需要先确保已经安装…...
selenium工作原理
原文链接:https://blog.csdn.net/weixin_67603503/article/details/143226557 启动浏览器和绑定端口 当你创建一个 WebDriver 实例(如 webdriver.Chrome())时,Selenium 会启动一个新的浏览器实例,并为其分配一个特定的…...