初阶数据结构(C语言实现)——6.1插入排序详解(思路图解+代码实现)
目录
- 1 插入排序基本思想:
- 2 直接插入
- 2.1 直接插入排序思想:
- 2.2 直接插入排序代码实现:
- 2.2.1 单趟直接插入排序实现
- 2.2.2 整体直接插入排序实现
- 3 希尔排序( 缩小增量排序 )
- 3.1希尔排序( 缩小增量排序 )思想
- 3.2 希尔排序代码实现
- 3.2.1单趟排序代码实现
- 3.2.2 gap组希尔排序代码实现1—外面套for循环
- 3.2.3 gap希尔排序代码实现2——不分组进行,同步进行
- 3.2.4 希尔排序代码最终实现版本(采用3.2.3的实现思想)
- 4 附录-插入排序源码
- 4.1 sort.h
- 4.2 sort .c
- 4.3 sortTest.c
1 插入排序基本思想:
直接插入排序是一种简单的插入排序法,其基本思想是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
实际中我们玩扑克牌时,就用了插入排序的思想。接牌的时候,第一张牌我们直接拿手里,然后第二张牌就会按我们的习惯,左边小,右边大,(或者左边大,右边小)去放牌。这就是插入排序的思想。
插入排序主要分为直接插入排序和希尔排序,后面分别先介绍两类排序算法思想,然后紧跟代码实现。
2 直接插入
2.1 直接插入排序思想:
当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移
直接插入排序的特性总结:
- 元素集合越接近有序,直接插入排序算法的时间效率越高
- 时间复杂度:O(N^2)
- 空间复杂度:O(1),它是一种稳定的排序算法
- 稳定性:稳定
2.2 直接插入排序代码实现:
- 直接插入排序思路图解
将8,5,1插入到2,4,7中,5和1是两种情况。
- tem = 5时和end = 7比较,tem < end,
end–,继续和4比较大于4,所以7后移,然后将tem赋值给end+1的位置,- tem = 1时 和end = 7比较,一直比较到2.
tem= 1 小于 end = 2 所以end –
此时end走到头,结束,将 2,4,7 均向后移动。
然后将tem =1 赋值给end+1的位置。
2.2.1 单趟直接插入排序实现
//升序
void insertSort(int* a, int n)
{//先写单趟排序,再整体排序int end ;//end是0位置int tem ;//tem 就是end后面1个位置while (end >= 0){if (tem < a[end]){//一个一个插入,当要插入值小于end位置的值,end位置往后的值都要往后移a[end + 1] = a[end];--end;//更新end的值}else{break; //这里是比较巧妙的做法,当我们插入值大于end的时候直接跳出,}}a[end + 1] = tem; //不论我们分析的1或者5两种情况,tem的值都赋值给了end+1位置
}
2.2.2 整体直接插入排序实现
//升序
void insertSort(int* a, int n)
{int i = 0;for (i = 1; i < n ; i++) //从1 开始从n结束,如果是0开始就是n-1结束{//先写单趟排序,再整体排序int end = i-1;//end是0位置int tem =a[i];//tem 就是end后面1个位置while (end >= 0){if (tem < a[end]){//一个一个插入,当要插入值小于end位置的值,end位置往后的值都要往后移a[end + 1] = a[end];--end;//更新end的值}else{break;}}a[end + 1] = tem;}}
- 验证
3 希尔排序( 缩小增量排序 )
3.1希尔排序( 缩小增量排序 )思想
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。
希尔排序的特性总结:
- 希尔排序是对直接插入排序的优化。
- 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
- 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些书中给出的希尔排序的时间复杂度都不固定:
《数据结构(C语言版)》— 严蔚敏
《数据结构-用面相对象方法与C++描述》— 殷人昆
我们的gap是按照Knuth提出的方式取值的,即gap/=2 或者 gap = gap /3 +1,而且Knuth进行了大量的试验统计,暂时就按照:O(n1.25) ~ O(1.6*n1.25)来算
- 稳定性:不稳定
3.2 希尔排序代码实现
3.2.1单趟排序代码实现
- 单趟希尔排序思路图解
间隔为gap分为一组对每组数据插入排序 gap = 3
蓝色是一组
橙色是一组
绿色是一组
- 单趟希尔排序代码实现
//希尔排序
void shellSort(int* a, int n)
{int i = 0;int gap = 3; //这是我们自己随便定的for (i = 0; i < n-1; i += gap){int end= i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}
}
3.2.2 gap组希尔排序代码实现1—外面套for循环
这里的思路就是分了gap组,所以最外层加了一个for循环,相当于,先实现蓝色组的插入排序,再实现橙色组的插入排序,最后实现绿色组的插入排序。
//希尔排序
void shellSort(int* a, int n)
{int i = 0;int gap = 3;int j = 0;for (j = 0; j < gap; j++) //gap 是几 就分几组,所以在最外层加一层循环{for (i = j; i < n - gap; i += gap)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
}
3.2.3 gap希尔排序代码实现2——不分组进行,同步进行
- 代码详细图解
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i= 6
- 实现代码
//希尔排序
void shellSort(int* a, int n)
{int i = 0;int gap = 3;int j = 0;
#if 0for (j = 0; j < gap; j++) //gap 是几 就分几组,所以在最外层加一层循环{for (i = j; i < n - gap; i += gap)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
#endif
#if 1for (i = j; i < n - gap; i++)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}
#endif
}
- 代码验证
经过3.2.2 和3.2.3 小结我们发现最终结果并不是有序的,这说明我们的gap取值不够精确
3.2.4 希尔排序代码最终实现版本(采用3.2.3的实现思想)
gap的取值,目前我们采用gap /=2 或者 gap = gap/3+1
//希尔排序
void shellSort(int* a, int n)
{int i = 0;int gap = n;int j = 0;
#if 0for (j = 0; j < gap; j++) //gap 是几 就分几组,所以在最外层加一层循环{for (i = j; i < n - gap; i += gap)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
#endif
#if 1while (gap > 1){gap /= 2;for (i = j; i < n - gap; i++)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
#endif
}
- 验证1
- 验证2
4 附录-插入排序源码
4.1 sort.h
#pragma once
#include<stdio.h>
void printArray(int* a, int n);
void insertSort(int* a, int n);
void shellSort(int* a, int n);
4.2 sort .c
#define _CRT_SECURE_NO_WARNINGS 1
#include"20250320_sort.h"void printArray(int* a, int n)
{int i = 0;for (i = 0; i < n; i++){//printf("%d ", *(a + i));printf("%d ", a[i]);}printf("\n");
}//升序
void insertSort(int* a, int n)
{int i = 0;for (i = 1; i < n; i++) //从1 开始从n结束,如果是0开始就是n-1结束{//先写单趟排序,再整体排序int end = i - 1;//end是0位置int tem = a[i];//tem 就是end后面1个位置while (end >= 0){if (tem < a[end]){//一个一个插入,当要插入值小于end位置的值,end位置往后的值都要往后移a[end + 1] = a[end];--end;//更新end的值}else{break;}}a[end + 1] = tem;}}//希尔排序
void shellSort(int* a, int n)
{int i = 0;int gap = n;int j = 0;
#if 0for (j = 0; j < gap; j++) //gap 是几 就分几组,所以在最外层加一层循环{for (i = j; i < n - gap; i += gap)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
#endif
#if 1while (gap > 1){// gap /= 2;gap = gap/3 + 1;for (i = j; i < n - gap; i++)//这里i 从j开始,最开始{int end = i; //end最开始就是0int tem = a[i + gap];//tem 是end后一个位置(间隔gap)while (end >= 0){if (tem < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tem;}}
#endif
}
4.3 sortTest.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"20250320_sort.h"void insertTest()
{int a[] = { 3,5,7,8,2,0,1 };int size = sizeof(a) / sizeof(a[0]);printArray(a, size);insertSort(a, size);printArray(a, size);
}void shellTest()
{int a[] = { 9,1,2,5,7,4,8,6,3,5};int size = sizeof(a) / sizeof(a[0]);printArray(a, size);shellSort(a, size);printArray(a, size);
}
int main(){// insertTest();shellTest();return 0;
}
相关文章:
初阶数据结构(C语言实现)——6.1插入排序详解(思路图解+代码实现)
目录 1 插入排序基本思想:2 直接插入2.1 直接插入排序思想:2.2 直接插入排序代码实现:2.2.1 单趟直接插入排序实现2.2.2 整体直接插入排序实现 3 希尔排序( 缩小增量排序 )3.1希尔排序( 缩小增量排序 )思想3.2 希尔排序代码实现3.2.1单趟排序…...
JAVA 中的 HashSet 工作原理
1. 底层数据结构 依赖 HashMap 存储元素: HashSet 内部维护了一个 HashMap 实例,元素作为 HashMap 的 Key 存储,而所有的 Value 统一指向一个静态的 PRESENT 对象(占位符)。 // HashSet 源码片段 pri…...
mysql连接池
本文主要探讨mysql连接池的实现。 readme *****************************************************mysql连接池 *****************************************************概述:高并发情况下,大量TCP三次握手、MySQL Server连接认证、MySQL Server关闭连…...
领码科技:在低代码技术浪潮中的分享与探索
前言: 25年的职业生涯,赋予了我深厚的技术积累与实践经验。从武汉大学的工测系毕业,到央企副总工的职位,我始终站在IT浪潮的最前沿。然而,离开企业后,我并未停止前行的脚步。从2024年11月起,我选…...
闻所闻尽:穿透声音的寂静,照见生命的本真
在《楞严经》的梵音缭绕中,"闻所闻尽"四个字如晨钟暮鼓,叩击着每个修行者的心门。这个源自观世音菩萨耳根圆通法门的核心概念,既是佛门修行的次第指引,更蕴含着东方哲学对生命本质的终极叩问。当我们穿越时空的帷幕&…...
蓝桥与力扣刷题(蓝桥 三角形面积)
题目: 如上图所示。图中的所有小方格面积都是 1。 那么,图中的三角形面积应该是多少呢? 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 解题思路+代码: 代码&…...
Linux信号:一场内核与用户空间的暗战
在Linux系统的黑暗森林中,每个进程都是小心翼翼的猎人。当一束神秘的信号光划过天际,内核瞬间变身信号调度大师,在进程的生死簿上书写着命运。这场跨越用户空间与内核态的博弈,远比表面看到的更加惊心动魄。 一、 信号诞生的量子…...
Spring Boot 异步返回对象深度解析
前言 在现代高并发、高响应的应用场景中,Spring Boot 的异步处理能力是提升系统吞吐量和用户体验的关键技术之一。无论是实时数据推送、大文件传输,还是复杂异步任务调度,Spring Boot 提供了多种灵活的异步处理机制以满足不同需求。本文将从…...
Android Compose 基础布局之 Box 和 Stack 源码深度剖析(九)
Android Compose 基础布局之 Box 和 Stack 源码深度剖析 一、引言 1.1 Android 开发中布局的重要性 在 Android 应用开发里,布局是构建用户界面(UI)的关键环节。良好的布局设计能够提升用户体验,使应用界面更加美观、易用且具有…...
【强化学习】Reward Model(奖励模型)详细介绍
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
UE5材质法线强度控制节点FlattenNormal
连法 FlattenNormal内部是这样的 FlattenNormal的作用是用来调整法线强度 连上FlattenNormal后 拉高数值...
<项目> 主从Reactor模型的高并发服务器
目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop(核心) eventfd 设计思路 …...
python爬虫解析器bs4,xpath,pquery
0x00 bs4 解析器的作用就是可以直接解析html页面,可以直接从网页中提取标签中的内容,而不用在使用正则表达式进行提起数据 import requests from bs4 import BeautifulSoup html_content <li id123><a hrefdfsdf>123</a>789</l…...
分析K8S中Node状态为`NotReady`问题
在Kubernetes(k8s)集群中,Node状态为NotReady通常意味着节点上存在某些问题,下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。 正常情况下Node节点应运行的容器 1. kubelet kubelet是节点上的核心组件&…...
【最后203篇系列】021 Q201再计划
忙了一周,终于到周末有时间再细细想这个问题了。这周还是不经意的弥补了kv硬盘存储库这个小空白的,这样也有助于构建更好的Q201。 计划是到6.1再发版,之所以留那么长时间,一方面是因为平时的确忙,另一方面则是可以有更…...
CA 机构如何防止中间人攻击
在现代互联网中,中间人攻击(Man-in-the-Middle Attack,简称 MITM)是一种常见的网络攻击方式,攻击者通过拦截和篡改通信双方的信息,进而窃取敏感数据或执行恶意操作。为了防止中间人攻击,证书颁发…...
CUL-CHMLFRP启动器 windows图形化客户端
CUL-CHMLFRP启动器 windows图形化客户端 基于v2 api开发的chmlfrp ui版本的第三方客户端 CUL原名CHMLFRP_UI CUL顾名思义为CHMLFRP-UI-Launcher 下载地址:https://cul.lanzoul.com/b00pzv3oyj 密码:ff50 下载解压运行即可(仅支持win7以上版本…...
C语言基础08
内容提要 数组 排序算法:冒泡排序 二维数组 字符数组 数组 冒泡排序 排序思想(向前冒泡) 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好 每次排序假定第一个元素是最大或者最小,用第一个…...
基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)
原文链接:从零开始的DeepSeek微调训练实战(SFT) 微调参考示例:由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…...
JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础实战
学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 笔记来源:在这位大佬的基础上添加了一些东西,欢迎大家支持原创,大佬太棒了:JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础…...
模型整合-cherry studio+mysql_mcp_server服务配置
一、什么是MCP MCP(Model Context Protocol)是模型上下文协议,它允许大型语言模型(LLM)通过协议与外部工具或服务交互,动态获取实时数据或执行操作。简单来说,它让模型不再局限于静态知识库&…...
【QA】装饰模式在Qt中有哪些运用?
在Qt框架中,装饰模式(Decorator Pattern)主要通过继承或组合的方式实现,常见于IO设备扩展和图形渲染增强场景。以下是Qt原生实现的装饰模式典型案例: 一、QIODevice装饰体系(继承方式) 场景 …...
window 设置自动开启/关闭程序(分享)
打开计算机管理 winr 输入 compmgmt.msc 找到任务计划程序创建任务 设置开启任务 常规:添加名称与描述 触发器:新建触发时间与次数 操作:新建执行程序 添加任务对应的位置 以便修改 设置关闭任务 添加批处理文件,写完后吧 .…...
QT布局笔记
在 Qt 中,如果你希望将一个 QGroupBox 放置在水平布局(QHBoxLayout)的上方,可以通过将它们添加到一个垂直布局(QVBoxLayout)中来实现。垂直布局会将子布局或子控件按垂直顺序排列,因此 QGroupBo…...
【LLM大模型】LangChain学习
大模型对话 from langchain.chat_models import ChatOpenAI # 内置对话模型 from langchain.schema import HumanMessage, SystemMessage, AIMessage # 用户提示词,系统提示词, AI响应chat ChatOpenAI(temperature0.7, openai_api_keyxxxxxxxxxxxx) #…...
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
目录 一、OFD 简介 1.1 什么是 OFD?1.2 什么是 版式文档?1.3 为什么要用 OFD 而不是PDF? 二、ofdrw 简介 2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD(ofdrw-conterver) 3.1 介绍…...
SolidWorks使用显卡教程
操作步骤: 打开注册表编辑器 按下键盘上的 Win R 组合键,输入 regedit 并按回车键,打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径: plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…...
mysql 查询进程查看并释放
在MySQL中,查看和管理进程(例如查询、连接等)是数据库维护和性能调优的重要部分。以下是一些常用的方法来查看MySQL进程并释放它们。 1. 查看进程 你可以使用SHOW PROCESSLIST命令来查看当前MySQL服务器上的所有进程。这个命令会显示正在执…...
C++代码2-多目标算法求解车辆路径规划
为了解决车辆路径规划问题,我们需要在同一模型中同时考虑多个目标,其中一个目标是降低运营总成本,而另一个目标是降低总的碳排放量。使用组合算法,包括人工蜂群算法(Artificial Bee Colony, ABC)、模拟退火算法(Simulated Annealing, SA)、以及多目标优化算法MODAD(Mu…...
JAVA学习*接口
接口 在生活中我们常听说USB接口,那接口是什么呢? 在Java中,接口相当于多个类的一种公共规范,是一种引用数据类型。 定义接口 public interface IUSB {public static final String SIZE "small";public abstract vo…...
Matplotlib
一、Matplotlib快速入门 学习目标 了解什么是matplotlib 为什么要学习matplotlib matplotlib简单图形的绘制 1、什么是Matplotlib 是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化 2、为什么要学习Matplotlib 可视化是在整个数据挖掘的关键辅助工…...
新版frp-0.61.0 实现泛解析域名穿透 以及 https启用
需要在公网服务器的域名解析平台 泛域名 *.aa.com 解析到frp 公网服务器的ip x.x.x.x 对于frpc.toml 文件的 serverAddr 绑定的ip 需要公网服务器放行 bindPort 对于的端口 frpc.toml serverPort 对于的的是 frps.toml bindPort 端口 frps.toml bindPort 7000 vhostHTTPP…...
HTTPS 加密过程详解
HTTPS 详解及其加密过程流程框架 HTTPS(Hypertext Transfer Protocol Secure)是一种基于 HTTP 协议的安全通信协议,通过 SSL/TLS 协议对传输数据进行加密和身份验证,解决了 HTTP 明文传输的安全隐患。以下是其核心原理和加密流程的…...
lua垃圾回收
lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)获取当前lua脚本占用内存字节数(单位为KB)。 collectgarbage(“collect”)执行一次垃圾回收。 xxxnil 将变量置为空,会释放内存。 lua中的机制和c#中回收机制很类似 解除羁绊(置为空)。 --垃圾回…...
springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类
以下是使用 MyBatis-Plus 分页插件的完整配置和封装步骤,包括日志输出、驼峰转下划线、逻辑删除以及分页属性类的封装。 1. 引入依赖 确保在 pom.xml 中已经引入 MyBatis-Plus 的依赖: <XML> <dependency><groupId>com.baomidou<…...
智能汽车以太网系统测试:聚焦ETH链路高负载性能表现
引言 在智能汽车高速发展的今天,车载以太网作为车辆信息交互的“神经网络”,承担着传输海量数据的关键使命。它不仅能够满足车辆对高带宽、低延迟和高可靠性的通信需求,还为自动驾驶、智能座舱等复杂功能提供了强大的技术支持。然而…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.21)
10.7 案例-员工管理-分页查询-分析 形参的默认值可以使用注解来设置:RequestParam(default “1”) 10.8 案例-员工管理-分页查询-PageHelper插件 分页插件PageHelper帮助完成有关分页的所有操作,我们只要正常使用查询语句就可以了。插件会自动…...
计算机网络精讲day1——计算机网络的性能指标(上)
性能指标1:速率 概念1:比特 英文全称是binary digit,意思是一个二进制数字,因此一个比特就是二进制数字中的1或0,比特也是信息论中使用的信息量单位。 概念2:速率 网络中的速率指的是数据的传送速率&#…...
gin-路由handler封装思路
约束handler入参和返回为func(ctx, req) (resp, error)。通过反射,封装handler,在调用前后写入入参和返回的处理。 package testingimport ("context""fmt""reflect""strings""testing" )type ReqPa…...
【实战案例】用STAR+3W模型拆解电商支付系统设计文档
各位开发者朋友,上次分享了结构化写作的黄金公式后,很多同学反馈需要更具象的落地方法。今天通过真实电商支付系统案例,手把手教你用STAR3W模型写出可执行的设计文档! 结构化写作的「黄金公式」 STAR原则 3W模型 Situation&…...
计算机组成原理和计算机网络常见单位分类及换算
计算机组成原理(主要用于存储、内存、缓存等) 计算机网络(主要用于传输速率) 直观对比...
线性筛法求素数
时间复杂度 o(n) int cnt, primes[N];//cnt用来记录素数的下标 bool st[N];//用来标记合数 int minp[N];//最小质因数 void get_primes(int n) {for(int i 2;i < n;i )//从2开始找数 {if(!st[i])//如果这个数没有被筛出去过,说明是一…...
触动精灵对某东cookie读取并解密--记lua调用C语言
在Mac上构建Lua扩展模块:AES解密与Base64解码实战 今天我要分享一个实用技术:如何在Mac系统上为Lua编写和编译C扩展模块,特别是实现一个某东iOS PIN码解密功能的扩展。这对于需要在Lua环境中执行高性能计算或使用底层系统功能的开发者非常有…...
GEO:在AI时代抢占DeepSeekC位?
前言:当SEO遇见AGI——一场静默的流量革命 在生成式AI日均处理53亿次查询的今天,传统SEO的「关键词-排名-点击」逻辑正在崩塌。DeepSeek、ChatGPT、豆包等大模型用动态生成的答案,悄然截流了68%的搜索需求。更残酷的是:当用户问&q…...
【设计模式】策略模式
以下是格式优化后的Markdown文档,仅调整代码缩进,保持内容不变: 四、策略模式 策略(Strategy) 模式是一种行为型模式,其实现过程与模板方法模式非常类似——都 是以扩展的方式支持未来的变化。本章通过对一个具体范例的逐步重构…...
第J6周:ResNeXt-50实战解析
文章目录 一、前期准备1.设置GPU2.导入数据3.查看数据 二、数据预处理1.加载数据2.可视化数据3.再次检查数据4.配置数据集 四、模型复现1. 分组卷积模块2. 定义残差模块3. 堆叠残差单元4. 搭建ResNext-50网络5. 查看模型摘要 五、训练模型六、结果可视化总结: &…...
调试 ResNet18 cpp实现中的段错误(SIGSEGV)问题
调试 ResNet18 cpp实现中的段错误(SIGSEGV)问题 问题分析 您的程序在运行时遇到了段错误(SIGSEGV),GDB显示错误发生在main()函数的第一行(resnet18_allo_test.cpp:33)。这种情况看起来很奇怪&…...
详细介绍IDI_APPLICATION和IDC_ARROW
书籍:《windows程序设计(第五版)》 环境:visual studio 2022 内容:HELLOWIN程序 说明:以下内容大部分来自腾讯元宝。 IDI_APPLICATION 与 IDC_ARROW 详解 1. IDC_ARROW(光标资源标识符) 定义与…...
curl库+openssl库windows编译
一、工具准备 Visual Studio 2008:确保安装了 C 开发工具。 Git:用于克隆 cURL 的源码。 Perl:可以从 ActiveState Perl 下载并安装。 NASM(可选):如果需要汇编优化,可以从NASM 官方网站 下载并…...