【数据结构】排序(附测试源码)
【数据结构】排序(附测试源码)
本节是数据结构排序版(不完整版,没有C语言版的哈希表)
1.排序概念:
1.1所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
1.2常见排序算法:
-
插入排序:
- 直接插入排序
- 希尔排序
-
选择排序:
- 直接选择排序
- 堆排序
-
交换排序:
- 冒泡排序
- 快速排序
-
归并排序
2.实现常见排序算法:
2.1插入排序:
基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列,例如玩扑克牌整理牌牌的时候。
2.1.1直接插入法:
- 概念:直接插入排序是一种简单的排序算法,基本思想是将未排序数据中的元素,依次插入到已排序系列的合适位置,从而逐步构建出一个完整的有序序列。
- 时间复杂度:
- 最好情况:O(n),比如排序序列本身就是有序的
- 最坏情况:O(n^2),比如逆序的待排序序列
- 平均情况:O(n^2)
空间复杂度:O(1)
图片示意:
代码实现(算法):
void InsertSort(int* arr, int n)
{for (int i = 0; i < n - 1; i++){int end = i;int tmp = arr[end + 1];while (end >= 0){if (arr[end] > tmp){arr[end + 1] = arr[end];end--;}else { break; }}arr[end + 1] = tmp;}
}
由此可观察到:当元素集合越接近有序,直接插入排序的时间算法效率越高。
但如果是不有序的元素集合,时间复杂度就会变得高,那么有没有什么办法能让复杂的元素集合比现在的时间复杂度低呢?
那么就会想到希尔排序,优化直接插入排序。
2.1.2 希尔排序
- 希尔排序又称缩小增量法。其基本思想是先选定一个整数(通常是gap=n/3+1,保证最后一次gap一定是1),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内,并对每一组内的记录进行排序,然后gap=gap/3+1得到下一个整数,再将数组分成各组,进行插入排序,当gap=1时,就相当于直接插入排序。
- 时间复杂度:O(n^1.3)
- 特点:当 gap > 1 时都是预排序,目的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。
图示:
代码实现(算法):
void ShellSort(int* arr, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1;for (int i = 0; i < n - gap; i++){int end = i;int tmp = arr[end + gap];while (end >= 0){if (arr[end] > tmp){arr[end + gap] = arr[end];end -= gap;}else{break;}}arr[end + gap] = tmp;}}
}
2.2 选择排序
选择排序的基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
2.2.1 直接选择排序
-
基本思想:在元素集合中选择最大(小)的元素,若它不是这组元素中的最后一个(第一个元素),则将它与这组元素中最后一个交换,在剩余的元素组合中重复以上步骤,直到集合剩余一个元素。
-
直接选择排序虽然思路容易理解,但是效率不是很好,实际中很少用到。
-
时间复杂度:O(n^2)
-
空间复杂度:O(1)
图示:
代码实现(算法):
void SelectSort(int* arr, int n)
{int begin = 0;int end = n - 1;while (begin < end){int mini = begin, maxi = begin;for (int i = begin+ 1; i <= end; i++){if (arr[i] > arr[maxi]){maxi = i;}if (arr[i] < arr[mini]){mini = i;}}//mini begin//maxi end//避免maxi begini都在同一个位置,begin和mini交换之后,maxi数据变成了最小的数据if (maxi == begin){maxi = mini;}Swap(&arr[mini], &arr[begin]);Swap(&arr[maxi], &arr[end]);++begin;--end;}}
2.2.2 堆排序
- 堆排序(Heapsort)是指利⽤堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。
- 时间复杂度:O(n*logn)
- 空间复杂度:O(1)
代码实现:
void AdjustDown(int* arr, int parent, int n)
{int child = parent * 2 + 1;//左孩子while (child < n){//大堆:找右孩子最大的if (child + 1 < n && arr[child] > arr[child + 1]){child++;}if (arr[child] < arr[parent]){swap(&arr[child], &arr[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}
void HeapSort(int* arr, int n)
{//建堆//升序---大堆//降序----小堆//向下调整算法建堆for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(arr, i, n);}//循环将堆顶数据跟最后位置(会变化,每次减少一个数据)的数据进行交换int end = n - 1;while (end > 0){swap(&arr[0], &arr[end]);AdjustDown(arr, 0, end);end--;}
}
2.3交换排序:
基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置
交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动
2.3.1冒泡排序:
-
冒泡排序是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小⽓泡⼀样,根据自身大小一点一点向数组的一侧移动。
-
时间复杂度:O(n^2)
-
空间复杂度:O(1)
图示:
代码实现:
void BubbleSort(int* arr, int n)
{for (int i = 0; i < n; i++){int exchange = 0;for (int j = 0; j = n - i - 1; j++){if (arr[j] > arr[j + 1]){exchange = 1;swap(&arr[j], &arr[j + 1]);}}if (exchange == 0){break;}}
}
2.3.2 快速排序
- 基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列 在相应位置上为止。
- 时间复杂度:O(n*logn)
- 空间复杂度:O(logn)
2.3.2.1 hoare版本
算法思路:
- 创建左右指针,确定基准值
- 从右往左找出比基准值小的数据,从右往左找出比基准值小的数据,从左向右找出比基准值大的数据,左右指针数据交换,进入下次循环
如何找基准值?
- right:从右往左找出比基准值小的数据
- left: 从左向右找出比基准值大的数据
图示:
这个方法有几个特殊的情景,比如集合里全是相同数值的元素,或者是集合里只有一个不同的元素。
代码实现(算法):
int _QuickSort(int* arr, int left, int right)
{int keyi = left;++left;while (left <= right)//left和right相遇的位置的值比基准值要大{while (left <= right && arr[right] > arr[keyi]){right--;}//right找到比基准值小/ 等于?while (left <= right && arr[left] < arr[keyi]){left++;}//right leftif (left <= right){Swap(&arr[left++], &arr[right--]);}}//right keyi交换Swap(&arr[keyi], &arr[right]);return right;
}void QuickSort(int* arr, int left, int right)
{if (left >= right){return;}//[left,right]--->找基准值midint keyi = _QuickSort(arr, left, right);//左子序列:[left,keyi-1]QuickSort(arr, left, keyi - 1);//右子序列:[keyi+1,right]QuickSort(arr, keyi + 1, right);
}
2.3.2.2 挖坑法
算法思路:创建左右指针。⾸先从右向左找出比基准小的数据,找到后立即放入左边坑中,当前位置变为新的"坑",然后从左向右找出比基准大的数据,找到后立即放入右边坑中,当前位置变为新的"坑",结束循环后将最开始存储的分界值放入当前的"坑"中,返回当前"坑"下标(即分界值下标)
图示:
代码实现:
//挖坑法
int _QuickSort2(int* arr, int left, int right)
{int hole = left;int key = arr[hole];while (left < right){while (left < right && arr[right] > key){--right;}arr[hole] = arr[right];hole = right;while (left < right && arr[left] < key){++left;}arr[hole] = arr[left];hole = left;}arr[hole] = key;return hole;
}
2.3.2.3 lomuto指针
算法思想:创建前后指针,从左往右找比基准值小的进行交换,使得小的都排在基准值的左边。
图示:
代码实现(算法):
//lomuto前后指针法
int _QuickSort(int* arr, int left, int right)
{int prev = left, cur = left + 1;int keyi = left;while (cur <= right){if (arr[cur] < arr[keyi] && ++prev != cur){Swap(&arr[cur], &arr[prev]);}cur++;}Swap(&arr[keyi], &arr[prev]);return prev;
}
2.4 归并排序
- 算法思想:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
- 时间复杂度:O(nlogn)
- 空间复杂度:O(n)
代码实现(算法):
//归并排序
void _MergeSort(int* arr,int left,int right,int* tmp)
{if (left >= right){return;}int mid = (left + right) / 2;//[left,mid] [mid+1,right]_MergeSort(arr, left, mid, tmp);_MergeSort(arr, mid + 1, right, tmp);//合并//[left,mid] [mid+1,right]int begin1 = left, end1 = mid;int begin2 = mid + 1, end2 = right;int index = begin1;while (begin1 <= end1 && begin2 <= end2){if (arr[begin1] < arr[begin2]){tmp[index++] = arr[begin1++];}else {tmp[index++] = arr[begin2++];}}//要么begin1越界但begin2没有越界 要么begin2越界但begin1没有越界//只有两种结果while (begin1 <= end1){tmp[index++] = arr[begin1++];}while (begin2 <= end2){tmp[index++] = arr[begin2++];}//[left,mid] [mid+1,right]//把tmp中的数据拷贝回arr中for (int i = left; i <= right; i++){arr[i] = tmp[i];}
}
2.5 测试代码:排序性能比较
// 测试排序的性能对⽐
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);int* a7 = (int*)malloc(sizeof(int) * N);int* a8 = (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];a7[i] = a1[i];a8[i] = a1[i];}int begin7 = clock();BubbleSort(a7, N);int end7 = clock();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);//QuickSortNonR(a5, 0, N - 1);int end5 = clock();int begin6 = clock();MergeSort(a6, N);int end6 = clock();int begin8 = clock();CountSort(a8, N);int end8 = 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);printf("BubbleSort:%d\n", end7 - begin7);printf("CountSort:%d\n", end8 - begin8);free(a1);free(a2);free(a3);free(a4);free(a5);free(a6);free(a7);free(a8);
}
3.各排序算法复杂度及稳定性
相关文章:
【数据结构】排序(附测试源码)
【数据结构】排序(附测试源码) 本节是数据结构排序版(不完整版,没有C语言版的哈希表) 1.排序概念: 1.1所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增…...
【翻译】大型 Transformer 模型推理优化
翻译原文:Large Transformer Model Inference Optimization | LilLog 原文作者:Lilian Weng 目录 方法概述蒸馏 Distillation量化 Quantization Transformer 量化的挑战训练后量化 (PTQ) 混合精度量化 Mixed-precision quantization细粒度量化量化的二…...
RabbitMQ概述
目录 RabbitMQ概述 前言 MQ MQ的作用 为什么选择RabbitMQ RabbitMQ的介绍 RabbitMQ概述 前言 Rabbit, 兔⼦的意思 互联⽹⾏业很多公司, 都喜欢⽤动物命名产品, 或者作为公司的logo, 吉祥物. ⽐如: 腾讯的企鹅, 京东的狗, 美团的袋⿏, 携程的海豚,阿⾥就更多了, 蚂蚁, ⻜…...
《PCI密码卡技术规范》题目
单选1 在《PCI密码卡技术规范》中,下列哪项不属于PCI密码卡的功能()。 A.密码运算功能 B.密钥管理功能 C.物理随机数产生功能 D.随主计算机可信检测功能 正确答案:D. <font style="color:#DF2A3F;">解析:</font> 单选 2 在《PCI密码卡技术规…...
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。 它的核心思想是通过…...
ECharts柱状图-柱图42,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…...
呼入机器人:24小时客户服务的未来趋势
呼入机器人:24小时客户服务的未来趋势 作者:开源大模型智能呼叫中心系统FreeAICC,Github:https://github.com/FreeIPCC/FreeAICC 在当今快节奏的商业环境中,客户服务已成为企业竞争的核心要素之一。随着人工智能技术…...
FFmpeg 安装教程(Windows 系统)
1. 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑,是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FFmpeg 安装包 打开 Dpwnload FFmp…...
左神算法基础巩固--1
文章目录 时间复杂度常数时间的操作时间复杂度的定义时间复杂度的作用剖析递归行为和递归行为时间复杂度的估算 排序选择排序冒泡排序插入排序归并排序小和问题问题描述解题思路 快速排序荷兰国旗问题问题描述 堆排序堆结构大根堆小根堆 桶排序 二分二分搜索 ^的运用不用额外空…...
基于鲲鹏服务器的打砖块小游戏部署
案例介绍 鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲鹏服务器具有高性能、低功耗、灵活的扩展能力,适合大数据分析、软件定义存储、Web等应用场景。 本案例将指导开发者如何在鲲鹏服务…...
STM32F407寄存器点灯
背景描述: 最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法; 上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头…...
电子电气架构 --- 队列刷写场景及刷写上位机浅析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
kubernates实战
使用k8s来部署tomcat 1、创建一个部署,并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…...
换工作,如何退出微软账户???(删除注册表数据)
1.Winr 进入 输入. 2.删除 注意路径. 3.删除 注意路径. 4.效果如下,清空成功...
vscode+编程AI配置、使用说明
文章目录 [toc]1、概述2、github copilot2.1 配置2.2 使用文档2.3 使用说明 3、文心快码(Baidu Comate)3.1 配置3.2 使用文档3.3 使用说明 4、豆包(MarsCode)4.1 配置4.2 使用文档4.3 使用说明 5、通义灵码(TONGYI Lin…...
60.基于SSM的个人网站的设计与实现(项目 + 论文)
项目介绍 本站是一个B/S模式系统,个人网站是在MySQL中建立数据表保存信息,运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的网…...
myexcel的使用
参考: (1)api文档:https://www.bookstack.cn/read/MyExcel-2.x/624d8ce73162300b.md (2)源代码: https://github.com/liaochong/myexcel/issues 我: (1)m…...
CSDN外链失效3:
参考我之前的博客: 外链失效博客1:随想笔记1:CSDN写博客经常崩溃,遇到外链图片转存失败怎么办_csdn外链图片转存失败-CSDN博客 外链失效博客2:网络随想2:转语雀_md格式转语雀lake格式-CSDN博客 markdown…...
SSM 医院预约挂号系统:Vue 技术驱动下的设计与实现飞跃
3系统分析 3.1可行性分析 通过对本医院预约挂号系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院预约挂号系统采用SSM框架,JAVA作为开发语…...
如何在centos系统上挂载U盘
在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…...
lshw学习——简单介绍
文章目录 简介核心结构扫描设备原理scan_abiscan_burnerscan_cdromscan_cpufreqscan_cpuidscan_cpuinfoscan_device_treescan_diskscan_displayscan_dmiscan_fatscan_fbscan_graphicsscan_idescan_ideraidscan_inputscan_isapnpscan_lvmscan_memoryscan_mmcscan_mountsscan_net…...
UI自动化概念+Web自动化测试框架
1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试:Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …...
java: 无效的目标发行版: xx
java: 无效的目标发行版: xx 背景java: 无效的目标发行版: xx 在 Intellij 的修复 背景 这里单独针对Intellij开发工具对 “java: 无效的目标发行版: xx”错误的修复。 java: 无效的目标发行版: xx 在 Intellij 的修复 同一台电脑使用多个JDK的时候容易出现在运行程序时容易…...
【QSS样式表 - ③】:QSS常用属性
文章目录 QSS常用属性字体样式QSS示例 边框样式QSS示例 盒子模型背景颜色、背景图片background-QSS示例 border-imageQSS示例1QSS示例2 QObject属性QSS示例 QSS常用属性 字体样式 以上也可以直接写成一行: font: 字体风格 字体粗细 字体大小 字体名称;QSS示例 新…...
WPF Binding 绑定
绑定是 wpf 开发中的精髓,有绑定才有所谓的数据驱动。 1 . 背景 目前 wpf 界面可视化的控件,继承关系如下, 控件的数据绑定,基本上都要借助于 FrameworkElement 的 DataContext 属性。 只有先设置了控件的 DataContext 属性&…...
掌握Java分支结构:if和switch详解
在编程中,顺序结构确实只能按照代码的书写顺序依次执行,而无法根据条件进行判断和选择。为了实现程序根据不同情况执行不同代码块的功能,我们需要使用分支结构。Java提供了两种主要的分支结构来帮助开发者实现这一目标: if 语句&…...
ES学习Promise对象(九)
这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…...
ssh 密钥对文件登录
首先提供我生成的密钥对【test-241222.pem】: -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAkrx1O 【.....】 -----END RSA PRIVATE KEY----- 1. 验证私钥格式 首先,确认test-241222.pem确实是有效的RSA私钥。你可以通过以下命令来验证(在Linux/Mac上): openssl …...
电流、电压,串联电路中,电流为什么处处相等?
电流是什么?串、并联中,电流的关系 飞书链接,看这个,格式更好,提供书籍下载 电流的本质定义: 电流 (I) 是 单位时间内,通过导体截面的电荷量。它的数学定义是: I Δ Q Δ t I \f…...
Python生成学生管理系统,使用qt组件,MySQL 数据库,-1
创建一个基于 Python 的学生管理系统,使用 Qt 组件(通过 PyQt5 或 PySide2)和 MySQL 数据库,是一个综合性的项目。以下是一个详细的指南,包括环境设置、数据库设计、Python 代码示例以及如何使用 Qt 设计用户界面。 #…...
接口测试Day03-postman断言关联
postman常用断言 注意:不需要手敲,点击自动生成 断言响应状态码 Status code:Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …...
微服务分布式(二、注册中心Consul)
首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…...
sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR
本文来自天工AI --------- 命令用于安装CMake的脚本,其中--skip-license参数表示跳过许可协议的显示,--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量,应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…...
信创技术栈发展现状与展望:机遇与挑战并存
一、引言 在信息技术应用创新(信创)战略稳步推进的大背景下,我国信创技术栈已然在诸多关键层面收获了亮眼成果,不过也无可避免地遭遇了一系列亟待攻克的挑战。信创产业作为我国达成信息技术自主可控这一目标的关键一招,…...
文本图像多模态基础-clip的细节解读
目录 一、我写的目的 二、原文出处 三、方法和benchmark 3.1 方法原理 3.2 值得注意的代码细节 实际的损失函数计算: evaluation的计算: backbone的类型: 3.3 benchamrk 推理时的细节-benchmark比较: 经典benchmark对…...
c4d动画怎么导出mp4视频,c4d动画视频格式设置
宝子们,今天来给大家讲讲 C4D 咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的,让你能轻松理解和掌握,不管是理论基础,还是实际操作和技能技巧,都能学到,快速入门然后提升自己哦。 c4d动…...
Mysql复习(二)
一、 DBMS:是管理数据库的软件的集合,是用户访问数据库的接口。主要功能:数据定义、数据操纵、数据库运行管理、数据库建立与维护等 二、 关系模式的完整性规则包括(实体完整性、参照完整性和用户自定义完整性) 实体…...
【芯片设计- RTL 数字逻辑设计入门 番外篇 13 -- FAB厂中PE工程师和PIE工程师的区别】
文章目录 Overview岗位职责的核心区别PE工程师:岗位要求的差异PE工程师接触面和协作关系后期职业发展方量产与研发的区别转自: 老虎说芯 老虎说芯 2024年12月20日 12:30 广东 Overview 在导体制造行业中,PE工程师(Process Engineer,工艺工程师)和PIE工程师(Process Int…...
java中的输入输出
目录 1.基本概念1.标准输入流(System.in):2.标准输出流(System.out):3.Scanner 类:4.File 类:6.BufferedReader 和 BufferedWriter:7.PrintWriter:…...
java抽奖系统(八)
9. 抽奖模块 9.1 抽奖设计 抽奖过程是抽奖系统中最重要的核⼼环节,它需要确保公平、透明且⾼效。以下是详细的抽奖过程设计: 对于前端来说,负责控制抽奖的流程,确定中奖的人员 对于后端来说: 接口1:查询完…...
在技术文档中多使用各种图
有些事情在文档中掰扯十几页,不如一幅图讲的明白!举个例子下面这幅图就是一个EDI 835电子报文(就是医保了,美国加州的)的业务流程。如果纯靠文字来描述,写很多文字不一定能说清楚。所以俺画了这幅图&#x…...
GB28181学习总结
GB28181学习总结 前言 我认为,学习一个新东西可以分成两步: 作用是什么? 原理是什么? 所以本文将从两个问题出发,对GB28181进行总结: GB28181是什么? GB28181原理是什么? GB…...
矩阵论:Vector-Valued Linear and Affine Functions介绍:中英双语
最近在翻看 这本书,对其中的一些英文概念做一些记录。 Link:https://web.stanford.edu/~boyd/books.html 中文版 向量值线性函数和仿射函数的详解 在机器学习、数据科学和工程应用中,向量值线性函数和仿射函数是非常重要的数学工具。本…...
网络七层杀伤链
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&…...
某狐畅游24校招-C++开发岗笔试(单选题)
某狐畅游24校招-C开发岗笔试 目录 某狐畅游24校招-C开发岗笔试一、单选题二、单选题解析 本文题目源来自:[PTA程序设计类实验辅助教学平台](PTA | 程序设计类实验辅助教学平台) 一、单选题 1-1 若有说明 int a[2][3]; 则对 a 数组元素的正确引用是 A. a[0][11]B. …...
spring mvc | servlet :serviceImpl无法自动装配 UserMapper
纯注解SSM整合 解决办法: 在MybatisConfig添加 Configuration MapperScan("mapper")...
在 CentOS 上安装 MySQL 8
在 CentOS 上安装 MySQL 8 您可以按照以下步骤操作: 1. 更新系统 首先,更新系统软件包以确保安装的最新版本。 sudo yum update -y 2. 安装 MySQL 8 安装 MySQL 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.r…...
EMC VMAX/DMX 健康检查方法
近期连续遇到2个由于对VMAX存储系统没有做及时的健康检查,出现SPS电池故障没有及时处理,然后同一pair就是同一对的另外一个SPS电池再次出现故障,然后存储系统保护性宕机vault,然后业务系统挂掉的案例。 开始之前,先纠…...
深入理解Kafka:核心设计与实践原理读书笔记
目录 初识Kafka基本概念安装与配置ZooKeeper安装与配置Kafka的安装与配置 生产与消费服务端参数配置 生产者客户端开发消息对象 ProducerRecord必要的参数配置发送消息序列化分区器生产者拦截器 原理分析整体架构元数据的更新 重要的生产者参数acksmax.request.sizeretries和re…...
Ubuntu命令行网络配置
临时连接 为什么需要临时连接,你最好测试你的网络适配器驱动能够连接到网络,然后再进行进一步的配置自动连接,否则也许会一直处在“折腾”中。 查看网络状态 ip addr show激活网络接口: sudo ip link set <适配器名称> up使…...