★ 数据结构 ★ 排序
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起学习数据结构中的各种排序~
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
澄岚主页:椎名澄嵐-CSDN博客
数据结构专栏:https://blog.csdn.net/2302_80328146/category_12764674.html?spm=1001.2014.3001.5482
❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️
目录
零 测试排序的性能
壹 冒泡排序
贰 插入排序
叁 堆排序
肆 希尔排序
伍 选择排序
陆 快速排序
6.1 hoare版本
6.2 挖坑法
6.3 前后指针法
6.4 非递归快排
柒 归并排序
7.1 递归版本
7.2 非递归版本
捌 计数排序
玖 总结
~ 完 ~
零 测试排序的性能
// 测试排序的性能对比
void TestOP()
{srand(time(0));const int N = 100000;int* a1 = (int*)malloc(sizeof(int) * N);int* a2 = (int*)malloc(sizeof(int) * N);int* a3 = (int*)malloc(sizeof(int) * N);int* a4 = (int*)malloc(sizeof(int) * N);int* a5 = (int*)malloc(sizeof(int) * N);int* a6 = (int*)malloc(sizeof(int) * N);for (int i = 0; i < N; ++i){a1[i] = rand();a2[i] = a1[i];a3[i] = a1[i];a4[i] = a1[i]; a5[i] = a1[i];a6[i] = a1[i];}int begin1 = clock();InsertSort(a1, N);int end1 = clock();int begin2 = clock();ShellSort(a2, N);int end2 = clock();int begin3 = clock();SelectSort(a3, N);int end3 = clock();int begin4 = clock();HeapSort(a4, N);int end4 = clock();int begin5 = clock();QuickSort(a5, 0, N - 1);int end5 = clock();int begin6 = clock();MergeSort(a6, N);int end6 = clock();printf("InsertSort:%d\n", end1 - begin1);printf("ShellSort:%d\n", end2 - begin2);printf("SelectSort:%d\n", end3 - begin3);printf("HeapSort:%d\n", end4 - begin4);printf("QuickSort:%d\n", end5 - begin5);printf("MergeSort:%d\n", end6 - begin6);free(a1);free(a2);free(a3);free(a4);free(a5);free(a6);
}
壹 冒泡排序
- 冒泡排序是一种非常容易理解的排序
- 时间复杂度:O(N ^ 2)
- 空间复杂度:O(1)
- 稳定性:稳定
// O(N^2) 最坏
// O(N) 最好
void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){// 单趟int flag = 0;for (int i = 0; i < n - j; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);flag = 1;}}if (flag == 0)break;}
}
贰 插入排序
插入排序就是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
- 元素集合越接近有序,直接插入排序算法的时间效率越高
- 时间复杂度:O(N ^ 2)
- 空间复杂度:O(1)
- 稳定性:稳定
// 时间复杂度:O(N^2) 什么情况最坏:逆序
// 最好:顺序有序,O(N)
// 插入排序
void Insertsort(int* a, int n)
{// 最后一次 a[n-1] 进到 [0, n - 2] 区间中// end为 n-2for (int i = 0; i < n - 1; i++){// 单趟int end = i;int tmp = a[end + 1];// [0, end]有序 把end+1位置的值插入while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];--end;}else{break;}}// end最后一次会移到-1,不进循环,不能在else中交换a[end + 1] = tmp;}
}
叁 堆排序
堆排序即利用堆的思想来进行排序,总共分为两个步骤:
- 建堆 升序:建大堆 降序:建小堆
- 利用堆删除思想来进行排序
void HeapSort(int* a, int n)
{// 向下调整建堆 O(N)for (int i = (n-2)/2; i >= 0; i--){AdjustDown(a, n, i);}// O(N * logN)int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);--end;}
}void AdjustDown(int* a, int n, int parent)
{// 先假设左孩子小int child = parent * 2 + 1;while (child < n) // child >= n说明孩子不存在,调整到叶子了{// 找出小的那个孩子if (child + 1 < n && a[child + 1] > a[child]){++child;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}
肆 希尔排序
希尔排序的基本思想:先选定一个整数,把待排序文件中所有记录分成gap组,所有距离为gap的记录分在同一组内,并对每一组内的记录进行排序。
希尔排序的特点:
- 希尔排序是对直接插入排序的优化。
- 当gap > 1时都是预排序,目的是让数组更接近于有序。
- 当gap == 1时插入排序,数组已经接近有序的了,这样就会很快。
- 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定,大约为O(N ^ 1.3)
void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1; // 保证最后一次gap是1// 有gap组for (int j = 0; j < gap; j++){// 每组排序// 若 i >= n - gap 则最后一次tmp会越界for (size_t i = 0; i < n - gap; i += gap){// 单趟int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}}
}
// 写法2:多组并行
void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1; // 保证最后一次gap是1for (size_t i = 0; i < n - gap; ++i){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}
伍 选择排序
每一次从待排序的数据元素中选出最小和最大的个元素,存放在序列的起始位置和末位置,直到全部待排序的数据元素排完 。
直接选择排序的特性总结:
- 好理解,但效率不好。很少使用。
- 时间复杂度:O(N ^ 2)
- 空间复杂度:O(1)
- 稳定性:不稳定
void SelectSort(int* a, int n)
{int begin = 0, end = n - 1;while (begin < end){int mini = begin, maxi = begin;for (int i = begin + 1; i <= end; ++i){if (a[i] > a[maxi]){maxi = i;}if (a[i] < a[mini]){mini = i;}}Swap(&a[mini], &a[begin]);if (begin == maxi){maxi = mini;}Swap(&a[maxi], &a[end]);begin++;end--;}
}
陆 快速排序
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
快速排序的特性总结:
- 1. 快速排序整体的综合性能和使用场景都是比较好的。
- 2. 时间复杂度:O(N*logN)。
6.1 hoare版本
void QuickSort(int* a, int left, int right)
{if (left >= right)return;// 小区间优化if ((right - left + 1) < 10){InsertSort(a + left, right - left + 1);}int keyi = QuickSortHoare(a, left, right);QuickSort(a, left, keyi - 1);QuickSort(a, keyi + 1, right);
}int QuickSortHoare(int* a, int left, int right)
{// 三数取中int midi = GetMid(a, left, right);Swap(&a[left], &a[midi]);int keyi = left;int begin = left, end = right;while (begin < end){while (begin < end && a[end] >= a[keyi]){--end;}while (begin < end && a[begin] <= a[keyi]){++begin;}Swap(&a[begin], &a[end]);}Swap(&a[keyi], &a[begin]);return begin;
}
int GetMid(int* a, int left, int right)
{int midi = (left + right) / 2;if (a[left] < a[midi]){if (a[midi] < a[right]){return midi;}// midi最大else if (a[left] < a[right]){return right;}else{return left;}}else // a[left] > a[midi]{if (a[midi] > a[right]){return midi;}// midi最小else if (a[left] < a[right]){return left;}else{return right;}}
}
6.2 挖坑法
6.3 前后指针法
int QuickSortPointer(int* a, int left, int right)
{// 三数取中int midi = GetMid(a, left, right);Swap(&a[left], &a[midi]);int keyi = left;int prev = left;int cur = prev + 1;while (cur <= right){if (a[cur] < a[keyi] && ++prev != cur)Swap(&a[prev], &a[cur]);++cur;}Swap(&a[prev], &a[keyi]);return prev;
}
6.4 非递归快排
int QuickSortNonR(int* a, int left, int right)
{ST st;STInit(&st);STPush(&st, right);STPush(&st, left);while (!STEmpty(&st)){int begin = STTop(&st);STPop(&st);int end = STTop(&st);STPop(&st);int keyi = QuickSortPointer(a, begin, end);// [begin, keyi - 1] keyi [keyi + 1, end]if (keyi + 1 < end){STPush(&st, end);STPush(&st, keyi + 1);}if (begin < keyi - 1){STPush(&st, keyi - 1);STPush(&st, begin);}}STDestory(&st);
}
柒 归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并排序的特性总结:
- 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
- 时间复杂度:O(N*logN)
- 空间复杂度:O(N)
- 稳定性:稳定
7.1 递归版本
void MergeSort(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail!");return;}_MergeSort(a, tmp, 0, n - 1);free(tmp);tmp = NULL;
}void _MergeSort(int* a, int* tmp, int begin, int end)
{if (begin >= end)return;int mid = (begin + end) / 2;// [begin, mid] [mid + 1, end]有序就可以归并了_MergeSort(a, tmp, begin, mid);_MergeSort(a, tmp, mid + 1, end);// 归并int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int i = begin;while (begin1 <= end1 && begin2 <= end2){// 谁小谁++if (a[begin1] < a[begin2]){tmp[i++] = a[begin1++];}else{tmp[i++] = a[begin2++];}}// 另一个没走完的while (begin1 <= end1){tmp[i++] = a[begin1++];}while (begin2 <= end2){tmp[i++] = a[begin2++];}memcpy(a + begin, tmp + begin, (end - begin + 1) * sizeof(int));
}
7.2 非递归版本
void MergeSortNonR(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail!");return;}// 每组归并个数int gap = 1;while (gap < n){for (int i = 0; i < n; i += 2 * gap){// 归并int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;printf("[%d, %d][%d, %d] ", begin1, end1, begin2, end2);// 第二组都越界,不用归并if (begin2 >= n)break;// begin2没越界,end2越界,修正end2if (end2 >= n)end2 = n - 1;int j = i;while (begin1 <= end1 && begin2 <= end2){// 谁小谁++if (a[begin1] < a[begin2]){tmp[j++] = a[begin1++];}else{tmp[j++] = a[begin2++];}}// 另一个没走完的while (begin1 <= end1){tmp[j++] = a[begin1++];}while (begin2 <= end2){tmp[j++] = a[begin2++];}memcpy(a + i, tmp + i, sizeof(int) * (end2 - i + 1));}gap *= 2;printf("\n");}free(tmp);tmp = NULL;
}
捌 计数排序
计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。
- 统计相同元素出现次数
- 根据统计的结果将序列回收到原来的序列中
计数排序的特性:
- 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
- 时间复杂度:O(N + range)
- 空间复杂度:O(range)
// 时间复杂度:O(N + range)
// 空间复杂度:O(range)
// 整数,范围集中
void CountSort(int* a, int n)
{// 选出max和minint min = a[0], max = a[0];for (int i = 1; i < n; i++){if (a[i] < min){min = a[i];}if (a[i] > max){max = a[i];}}int range = max - min + 1;int* count = (int*)calloc(range, sizeof(int));if (count == NULL){perror("calloc fail!");return;}// 统计次数for (int i = 0; i < n; i++){count[a[i] - min]++;}// 排序int j = 0;for (int i = 0; i < range; i++){while (count[i]--){a[j++] = i + min;}}
}
玖 总结
排序种类 | 时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|
直接插入排序 | O(N ^ 2) | O(1) | 稳定 |
希尔排序 | O(N ^ 1.3) | O(1) | 不稳定 |
选择排序 | O(N ^ 2) | O(1) | 不稳定 |
堆排序 | O(N * logN) | O(1) | 不稳定 |
冒泡排序 | O(N ^ 2) | O(1) | 稳定 |
快速排序 | O(N * logN) | O(logN) | 不稳定 |
归并排序 | O(N * logN) | O(N) | 稳定 |
~ 完 ~
相关文章:
★ 数据结构 ★ 排序
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起学习数据结构中的各种排序~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页:椎名澄嵐-CSDN博客 数据结构专栏:https://blog.csdn.net/2302_80328146/categ…...
数据结构 (26)图的遍历
前言 数据结构中的图遍历是指从图中的任一顶点出发,按照某种方法访问图中的所有顶点,且每个顶点只访问一次。 一、遍历方法 遍历主要有两种方法:深度优先搜索(DFS)和广度优先搜索(BFS)。 1.深度…...
用vue框架写一个时钟的页面
你可以使用Vue框架来创建一个简单的时钟页面。首先,你需要在HTML文件中引入Vue框架的CDN: <script src"https://cdn.jsdelivr.net/npm/vue"></script>然后,创建一个包含时钟功能的Vue实例: <div id&qu…...
【Android】View的工作流程——measure
1.View的工作流程入口 1.1DecorView被加载到Window中 看到这里你对Activity的构成有一定的了解,每个 Activity 都有一个与之关联的 Window 对象,而 DecorView 是这个 Window 的根视图。当DecorView被创建以及加载资源的时候,此时它的内容还…...
day35—蓝桥杯2024年第16届校赛模拟第二期-T4(最小花费)
【问题描述】 小蓝有一个整数,初始值为 1 ,他可以花费一些代价对这个整数进行变换。 小蓝可以花费 1 的代价将整数增加 1 。 小蓝可以花费 3 的代价将整数增加一个值,这个值是整数的数位中最大的那个(1 到 9)。 小蓝可…...
Java 中 List 接口的学习笔记
1. 什么是 List? 在 Java 中,List 是一个接口,属于 Java Collections Framework。它表示一个有序的集合,可以包含重复元素。List 接口允许通过索引访问元素,提供了多种实现方式,如 ArrayList 和 LinkedLis…...
朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?
作者:邹星宇、刘尧 朗新科技集团:让数字化的世界更美好 朗新科技集团股份有限公司是领先的能源科技企业,长期深耕电力能源领域,通过新一代数字化、人工智能、物联网、电力电子技术等新质生产力,服务城市、产业、生活中…...
hive hms和hs2的sql执行日志分析
HMS日志: 2024-12-02 15:39:20,811 INFO org.apache.hadoop.hive.metastore.HiveMetaStore: [pool-8-thread-114]: 114: source:10.11.17.999 get_all_databases 2024-12-02 15:39:20,812 INFO org.apache.hadoop.hive.metastore.HiveMetaStore.audit: [pool-8-thre…...
Mybatis-plus 多租户插件
前言 本篇主要分析Mybatis-plus 多租户插件,然后根据多租户插件在延伸到其他场景 案例 Mybatis-plus官网对多租户插件已有详细讲解,这里就不在附上使用案例。 源码分析 MybatisPlus官方是由TenantLineInnerInterceptor这个拦截器进行多租户功能处理…...
浅谈新能源汽车感应钥匙一键启动的步骤和特点
随着汽车智能化技术的发展,无钥匙启动系统还可以与其他智能系统进行集成,如智能车载系统、远程控制系统等。这使得车主可以通过智能手机等智能设备远程控制车辆的启动、解锁、上锁等操作,进一步提升了使用的便捷性和智能化水平。新能源汽车…...
012 路由信息协议RIP
路由信息协议RIP 作为度量(Metric)来衡量到达目的网络的距离 RIP是一种基于距离矢量D-V(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。 默认情况下,路由器到与它直接相连网络的跳数为0,因此…...
008.精读《Apache Paimon Docs - Table w/o PK》
文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…...
在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208
🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型(LLM)和人工智能技术的迅猛发展,开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…...
微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算
微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…...
网络原理——HTTPS
一、什么是HTTPS 1.1 HTTPS的概念 HTTPS 也是⼀个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层(即HTTP SSL/TLS,SSL、TLS也是一个应用层协议,专门负责加密) HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输…...
数据结构之四:堆和二叉树
堆的实现:SData/Heap/heap.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 树 树的概念 树:是一个非线性数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就…...
语音识别flask接口开发
要开发一个flask语音识别接口,首先要解决语音文件在网络中的传输问题,然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码,以…...
MISRA C2012学习笔记(10)-Rules 8.15
文章目录 8.15 控制流(Control flow)Rule 15.1 不应使用 goto 语句Rule 15.2 goto 语句仅允许跳到在同一函数中声明的稍后位置的标签Rule 15.3 goto 语句引用的标签必须在 goto 语句所在代码块或包含该代码块的上级代码块中声明Rule 15.4 最多只能有一个用于终止循环语句的 bre…...
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...
DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建
知识点: 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源,只要在“…...
如何实现 3D GPR的仿真模拟
通过ai问题生成得到的。 1 模型文件-MATLAB 在gprmax中模拟3D GPR工作,可以通过编写一个MATLAB脚本来创建几何文件,并使用gprmax的输入文件(in文件)来设置模拟参数。以下是一个简单的例子程序,展示了如何创建一个3D …...
k8s 之 Deployment
(1)Deployment 作用是确保 Pod 副本数量,能够保证 Pod 数量与期望值一样,会有自恢复功能。简洁地说:具有 水平扩展 / 收缩 功能。 可能好奇的是在 kubernetes 中是谁在执行这些控制器的,它就是 kube-contr…...
现代C++ 6 声明
文章目录 C 中的冲突声明规则1. **对应声明(Corresponding Declarations)**2. **对应函数重载(Corresponding Function Overloads)**3. **对应函数模板重载(Corresponding Function Template Overloads)**4…...
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
目录 一、Spark核心概念 1、应用程序Application 2、作业Job 3、阶段Stage 4、任务Task 二、示例 一、Spark核心概念 在Apache Spark中,有几个核心概念用于描述应用程序的执行流程和组件,包括应用程序 Application、作业Job、阶段Stage、任务Task…...
【WebRTC】Android SDK使用教学
文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习WebRTC的时候,发现只有JavaScript的API文档,找了很久没有找到Android相关的API文档,所以通过此片文章记录下在Android应用层如何使用WebRTC 本篇文章结合:【W…...
算法-字符串-8.字符串转换整数
一、题目 二、思路解析 1.思路: 依次遍历,查看当前字符是否在规定范围内 2.常用方法: 1.trim(),去字符串的首尾空字符 ss.trim(); 2.substring(beginIndex),截断字符串,得到新的字符串是[1,s.length()-1] ss.substring(1); 3.st…...
普通算法——一维前缀和
一维前缀和 题目链接:https://www.acwing.com/problem/content/797/ 题目描述: 输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。 **什么是…...
【Elasticsearch】ES+MySQL实现迷糊搜索
1. 技术选型 使用 Elasticsearch (ES) 结合 MySQL 进行数据存储和查询,而不是直接从 MySQL 中进行查询,主要是为了弥补传统关系型数据库(如 MySQL)在处理大规模、高并发和复杂搜索查询时的性能瓶颈。具体来说,ES 与 My…...
MacOS编译webRTC源码小tip
简单记录一下,本人在编译webRTC时,碰到了一下比较烦人的问题,在MacOS终端下,搭建科学上网之后,chromium的depot_tools仓库成功拉下来了,紧接着,使用fetch以及gclient sync始终都返回curl相关的网…...
Android显示系统(05)- OpenGL ES - Shader绘制三角形(使用glsl文件)
Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…...
深度学习小麦头检测-基于Faster-RCNN的小麦头检测——附项目源码
比赛描述 为了获得有关全世界麦田的大量准确数据,植物科学家使用“小麦头”(包含谷物的植物上的穗)的图像检测。这些图像用于估计不同品种的小麦头的密度和大小。但是,在室外野外图像中进行准确的小麦头检测可能在视觉上具有挑战性。密集的小麦植株经常重叠,并且风会使照片…...
成像报告撰写格式
成像报告撰写格式 实验人员: 实验时间: 实验地点: 实验目的: 1实验仪器 1.1相机 包括制造商,型号,面阵还是线阵,彩色还是黑白,图像尺寸,光学接口等。 1.2镜头 包…...
【数学建模】线性规划问题及Matlab求解
问题一 题目: 求解下列线性规划问题 解答: 先将题目中求最大值转化为求最小值,则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为: 等式…...
C# 事件(Event)
文章目录 前言1、 声明委托2、 声明事件3、 触发事件4、订阅和取消订阅事件5、示例展示示例一:基础的事件使用流程示例二:简单数值变化触发事件示例三:锅炉系统相关事件应用 前言 在 C# 中,事件(Event)是一…...
企业数字化转型:从爆品起步,迈向生态平台
在当今数字化浪潮席卷全球的时代,企业数字化转型已成为必然趋势。然而,这条转型之路该如何走呢? 企业数字化转型的路径设计,绝不仅仅是技术的升级换代,它需要综合考量多方面因素。一方面,要为实现战略目标做…...
Windows 安装 MySQL
1.下载 MySQL 安装包 访问:MySQL :: Download MySQL Installer选择适合的版本。推荐下载 MySQL Installer for Windows,该安装包包含所有必要的组件选择 Windows (x86, 32-bit), MSI Installer 或 Windows (x86, 64-bit), MSI Installer 2.运行安装程序…...
游戏引擎学习第37天
仓库 : https://gitee.com/mrxiao_com/2d_game 回顾目前的进展 一个简单的调试工具——位图加载器,用于加载存储在硬盘上的位图文件。这个工具将文件加载到内存中,并查看文件头部信息,确保其正确性。接着使用位图头中的偏移量来获取像素数据…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
知乎Java后台开发面试题及参考答案
请简述 TCP 的三次握手和四次挥手过程。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 三次握手过程 首先,客户端想要建立连接,会发送一个带有 SYN(同步序列号)标志的 TCP 报文段,这个报文段中还包含一个初始序列号(ISN,Initial Sequenc…...
Java中的String类用法详解
1.字符串拆分 可以把一个完整的字符串按照规定的分隔符拆分为若干个子字符串 String[] split(String regex) 将字符串全部拆分 String[] split(String regex,int limit) 将字符串以指定的格式拆分,拆分成limit组 实例:字符串的拆分处理 public class Main4 {public stat…...
mac电脑安装hadoop、hive等大数据组件
背景:用本地的Hadoop测试Java调用cmd命令 2024-12-08 13:48:19,826 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable ls: .: No such file or directory解决方案:…...
DHCP和DNS
DHCP(动态主机配置协议)和DNS(域名系统)是计算机网络中两个重要的协议,它们在网络的管理和使用中发挥着关键作用。 DHCP(动态主机配置协议) 基本功能 自动分配IP地址:DHCP允许网…...
Postman安装使用教程
Postman(接口测试工具) ①、介绍 Postman是一款支持http协议的接口调试与测试工具,它不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求。 ②、安装 Ⅰ、运行安装包/官网直搜 Ⅱ、创建…...
剖析千益畅行,共享旅游-卡,合规运营与技术赋能双驱下的旅游新篇
在数字化浪潮席卷各行各业的当下,旅游产业与共享经济模式深度融合,催生出旅游卡这类新兴产品。然而,市场乱象丛生,诸多打着 “共享” 幌子的旅游卡弊病百出,让从业者与消费者都深陷困扰。今天,咱们聚焦技术…...
信创改造-达梦数据库配置项 dm.ini 优化
设置模式:兼容MySQL,COMPATIBLE_MODE 4 内存占比:90%,MAX_OS_MEMORY 90 目标内存:2G(不影响申请内存超过2G,但这部分内存不会回收),MEMORY_TARGET 2000 参考 https:…...
docker入门 自记录
1.先自己下载离线bao .tar 或者 自己pull docker pull xxx 如果遇到网络问题就换源 2.之后run一个docker 后面是映射本地路径 sudo docker run -it --name ultralytics_241124 --gpus all --shm-size 8G -v /home/oppenheim/detect/train241204/docker:/home/docker ultralyti…...
Axure设计之动态图表——排名图(中继器)
粉丝问我可不可以用中继器做条形图,而且是要做成自动增长的排名图表。所以现在教大家怎么用axure来制作制作排名图。 这个原型制作完成之后,后期有类似的功能,直接拿过去使用也比较简单,基本只需要修改中继器数据就可以了。喜欢、…...
在Java中几种常用数据压缩算法的实现及其优劣势
在Java中几种常用数据压缩算法的实现及其优劣势 背景:项目需要引入Redis作为缓存组件,需要考虑到Redis的内存占用(机器内存越大,成本越高),因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...
Mac通过Windows App远程访问windows电脑报错0x104的解决办法
1、远程windows电脑,确保打开 远程访问 2、Mac电脑上的配置: 2.1 新版的windows app远程桌面软件相比之前老的Microsoft Remote Desktop,对于mac来说,不会弹出“是否允许该app查找本地网络设备”,需要手动打开 操作步…...
Spring Boot接口返回统一格式
统一的标准数据格式好处 SpringBoot返回统一的标准数据格式主要有以下几点好处: 增强接口的可读性和可维护性,使得前端开发人员能够更加清晰地理解接口返回的数据结构,从而提高开发效率。 降低前后端耦合度,当后端需要修改返回数…...