嵌入式开发学习日志(排序算法,字符型数组) day8 持续更新中 一、数组排序升序、降序1. 选择排序思想将待排序位置的数据和后面的数据依次进行比较按照升序要求将较小值存储在待排位置。时间复杂度效率O(n²)空间复杂度空间 / 内存O(1)排序算法的稳定性定义 在一个待排序列中出现了两个相同的数据经过排序之后这两个相同数据的相对位置没有发生变化则该排序算法为稳定的排序算法假如这两个相同数据的相对位置发生了变化则该排序算法是一个不稳定的排序算法。参考代码int a[10] {1,2,-3,-4,-5,6,7,8,-9,0}; int len sizeof(a) / sizeof(a[0]); int i 0; int j 0; int tmp 0; for (i 0; i len-1; i) { for (j i1; j len; j) { if (a[i] a[j]) { tmp a[i]; a[i] a[j]; a[j] tmp; } } }2. 冒泡排序思想相邻两两数据进行比较按照升序要求将较大值交换到两两中的后者位置经过一趟排序优先确定最大值。时间复杂度O(n²)空间复杂度O(1)稳定性稳定参考代码降序冒泡int a[10] {1,-2,-3,4,5,6,7,8,-9,0}; int len sizeof(a) / sizeof(a[0]); int i 0; int j 0; int tmp 0; for (j 0; j len-1; j) { for (i 0; i len-1-j; i) { if (a[i] a[i1]) { tmp a[i]; a[i] a[i1]; a[i1] tmp; } } }3. 插入排序课件仅标题标注无代码实现4. 二分查找折半查找前提条件序列必须有序思想升序数组将要查找的值和序列的中间位置值比较比中间位置值大则在后半序列中继续折半查找如果比中间值小则从前半个序列中继续折半查找如果恰好相等则找到。优势效率高时间复杂度 O(log n)参考代码i 0; j len-1; while (i j) { mid (i j) / 2; if (num a[mid]) { i mid 1; } else if (num a[mid]) { j mid - 1; } else { printf(find %d\n, a[mid]); break; } } if (i j) { printf(Not find\n); }二、字符型数组作用保存多个字符 → 存储字符串1. 字符型数组定义char 数组名[常量];数组名遵循标识符命名规则 示例char str[32]; // sizeof(str) 结果为32字节2. 字符型数组元素访问格式数组名[下标]str[0]; //类型为char⚠注意下标避免数组越界。3. 字符型数组的初始化1全部初始化char str[5] {h,e,l,l,o}; char str[] {h,e,l,l,o}; //占用5字节 char str[] {hello}; char str[] hello;当 [] 常量被省略时数组空间按照初始化后的字符个数确定字符串形式初始化会额外增加\0存储位置。2局部初始化char str[32] {h,e,l,l,o}; char str[32] {hello}; char str[32] hello;规则没有初始化的部分默认存储 0\0区分记忆0等价于\048等价于000 \03初始化全 0char str[32] {0}; char str[32] {\0};4. 字符型数组的存储特点单一性存储类型为 char有序性访问顺序str[0] → str[n]连续性内存占用连续空间5. 字符型数组的输入输出输出方式char str[32] {h,e,l,l,o}; char str1[32] {hello}; int i 0; //方式1循环逐个字符输出 for (i 0; str[i] ! \0; i) { printf(%c, str[i]); } printf(\n); //方式2printf整体输出 printf(%s\n, str); printf(%s\n, str1); //方式3puts输出自带换行 puts(str); puts(str1);输入方式char str[100] {0}; //遇到空格、tab、回车停止读入 scanf(%s, str); //危险函数存在越界风险新标准C已经废弃 gets(str);两个核心函数区分strlen(str)计算字符串有效字符长度不包含\0sizeof(str)计算字符数组占用内存总字节数由定义数组时开辟空间大小决定6. 字符型数组操作方法字符串基础功能① strlen获取字符串长度手写实现原理int i 0; while (src[i] ! \0) { i; } printf(len %d\n, i);② strcpy把源字符串拷贝到目标字符数组中手写实现原理char src[32] {hello world}; char dst[32] {0}; int i 0; while (src[i] ! \0) { dst[i] src[i]; i; } dst[i] \0; printf(dst %s\n, dst);③ strcat将源字符串拼接到目标字符串后边④ strcmp比较两个字符串大小三、核心易错点汇总字符串结束标志\0ASCII 0和字符0ASCII 48绝对不能混淆scanf(%s)无法读取带空格字符串gets()可以读取空格但函数已废弃排序区分稳定性选择排序不稳定冒泡排序稳定二分查找只能用于有序数组strlen和sizeof是高频考点不要混淆字符数组拷贝、拼接完成后必须手动补充结束符\0否则输出乱码。

相关新闻

最新新闻

初创实习-CFF-GRPO

初创实习-CFF-GRPO

1. 背景 无论是 GRPO 还是 PPO,都需要 RM,但是 RM 无法迁移到 corner data 上,因此这种在线的方式需要进行修改,如果能完全依靠规则的方式进行奖励那就好很多了🤔(参考 GRPO 的规则奖励) 我们希望在 Stage3 的基础之上,表现能够进一步提升; GRPO 相关链接: https…

2026/7/30 7:05:26
基于 ARM 异构跨芯片算力调度的端侧离线 AI 智能体多端分级同系统及方法协

基于 ARM 异构跨芯片算力调度的端侧离线 AI 智能体多端分级同系统及方法协

已提交申请发明专利发明名称基于 ARM 异构跨芯片算力调度的端侧离线 AI 智能体多端分级同系统及方法协一、技术领域本发明属于 ARM 架构异构算力调度、端侧离线人工智能、多终端协同技术领域,涵盖嵌入式音视频采集、无线图传、AI 智能导播推流、本地多人隔离办公、离…

2026/7/30 7:05:26
Git 完整学习笔记:从入门到团队协作

Git 完整学习笔记:从入门到团队协作

文章目录Git 完整学习笔记:从入门到团队协作(版本控制 命令 分支 冲突 远程仓库)一、版本控制分类1. 集中式版本控制2. 分布式版本控制二、Git 三大工作区域1. 工作区(workspace)2. 缓存区(index / 暂存…

2026/7/30 7:05:26
C++核心构造单元:类、结构体、指针与引用深度解析与实战指南

C++核心构造单元:类、结构体、指针与引用深度解析与实战指南

1. 从“砖块”到“蓝图”:C核心构造单元深度解析干了这么多年C,我越来越觉得,学语言就像盖房子。你光知道砖头(基础数据类型)怎么用是远远不够的,你得知道怎么把它们砌成一面墙(结构体/类&#…

2026/7/30 7:05:26
干词背单词法:高效记忆原理与实战技巧

干词背单词法:高效记忆原理与实战技巧

1. 干词背单词现象解析最近在语言学习圈里突然火起来一个叫"干词"的背单词方法,我身边好几个考雅思的朋友都在用。作为一个教了8年英语的老师,我特意研究了这个方法,发现它确实解决了很多传统背单词的痛点。所谓"干词"&a…

2026/7/30 7:05:26
AI 编程时代,真正稀缺的不是代码,而是可验证的意图

AI 编程时代,真正稀缺的不是代码,而是可验证的意图

当代码可以在几分钟内生成,软件开发最难的部分就不再是“怎么写”,而是“到底该写什么,以及如何证明它写对了”假设你对 AI 说:“给系统增加一个会员续费功能”几分钟后,它可能已经改好了数据库、接口、支付回调和前端…

2026/7/30 7:00:26

月新闻