C语言基础篇(7):数组进阶——排序、查找与字符数组
一、数组知识小结回顾在进入进阶内容之前先回顾数组的核心知识点1.1 为什么需要数组当需要处理大量同类型数据时如统计全班成绩逐个定义变量不现实数组提供了一种批量管理变量的方式。1.2 数组定义数据类型 数组名[数组长度]; int a[10]; // 定义了一个包含 10 个 int 型元素的数组1.3 数组的三大特点特点说明连续性数组元素在内存中占用一片连续的空间单一性数组中存放的是同一类型的数据有序性元素按下标顺序排列第一个后面就是第二个1.4 数组元素的引用通过下标访问数组中的具体元素a[0] 1; // 下标从 0 开始 a[1] 2;1.5 给值方式// 全部初始化 int a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 部分初始化——前面的元素依次赋值后面默认为 0 int a[10] {1, 2, 3, 4, 5}; // 不初始化——数组中是随机值垃圾值 int a[10]; // 初始化成全 0 int a[10] {0}; int a[10] {}; // 初始化器默认给 0 // 初始化时省略长度由初始化值个数推算 int a[] {1, 2, 3, 4}; // 数组长度为 4注意数组不能整体赋值int a[10]; a {1, 2, 3, 4, 5}; // ❌ 错误必须逐个元素赋值 a[0] 2; // ✅ 正确二、排序算法2.1 选择排序核心思想给合适的位置选择合适的数。算法步骤外层循环控制位置内层循环从剩余元素中找到合适最小或最大的数放到当前位置。代码实现升序int i, j; for (i 0; i n - 1; i) // 外层控制位置 { for (j i 1; j n; j) // 内层从 i1 开始找数 { if (a[j] a[i]) // 如果找到更小的 { int t a[i]; // 交换 a[i] a[j]; a[j] t; } } }时间复杂度分析i 0 时内层循环 n-1 次 i 1 时内层循环 n-2 次 i 2 时内层循环 n-3 次 ... i n-2 时内层循环 1 次 总计1 2 3 ... (n-1) n(n-1)/2 n²/2 - n/2时间复杂度O(n²)用最高次项来反映增长趋势2.2 冒泡排序核心思想相邻两个元素两两比较小的往前放大的往后放像气泡一样浮到末尾。代码实现升序int i, j; for (i 1; i n; i) // 外层控制趟数 { for (j 0; j n - i; j) // 内层相邻比较 { if (a[j] a[j 1]) // 前面比后面大就交换 { int t a[j]; a[j] a[j 1]; a[j 1] t; } } }时间复杂度O(n²)2.3 插入排序核心思想将数据插入到已有的有序序列中通过和已排序的序列进行比较找到合适的位置插入。场景理解想象打扑克牌时每摸一张新牌就把它插入到手中已排好序的牌的正确位置。代码实现升序int i, j; for (i 1; i n; i) { int t a[i]; // 取出当前要插入的元素 j i; while (j 0 t a[j - 1]) // 在已排序序列中从后往前找位置 { a[j] a[j - 1]; // 比 t 大的元素往后挪 --j; } a[j] t; // 插入到正确位置 }时间复杂度分析i 1 时最多比较 1 次 i 2 时最多比较 2 次 i 3 时最多比较 3 次 ... i n-1 时最多比较 n-1 次时间复杂度O(n²)2.4 三种排序对比排序算法时间复杂度核心思想选择排序O(n²)给合适的位置选择合适的数冒泡排序O(n²)相邻元素两两比较大的往后冒泡插入排序O(n²)将元素插入到已排序序列的正确位置三、查找算法二分查找3.1 前提条件数据必须是有序的排好序的数组。3.2 核心思想每次找到中间位置将中间位置的值和要找的值比较中间值目标值 → 目标在左半部分中间值目标值 → 目标在右半部分中间值目标值 → 找到了3.3 过程图示以在有序数组中查找值1为例数组1 2 3 4 5 6 7 8 9 10 第 1 次中间值 55 1往左找 第 2 次中间值 22 1往左找 第 3 次中间值 11 1找到3.4 代码实现int begin 0, end n - 1, mid; int target; // 要查找的目标值 int found -1; // -1 表示未找到 while (begin end) { mid (begin end) / 2; // 中间位置 if (a[mid] target) { end mid - 1; // 目标在左半部分 } else if (a[mid] target) { begin mid 1; // 目标在右半部分 } else { found mid; // 找到了记录位置 break; } } if (begin end) { // 找到了 printf(找到了位置是 %d\n, found); } else { // 没找到 printf(没找到\n); }3.5 时间复杂度情况时间复杂度最好O(1)一次就找到最差O(logN)每次排除一半四、一维字符型数组与字符串4.1 字符数组的定义char s[10]; // 10 个 char 元素的数组大小 10 字节字符型数组和 int 型数组本质上没有太大区别主要是用来处理字符数据。4.2 字符串的存储方式C 语言中用双引号表示字符串常量hello字符串在内存中按字符数组方式存储char s[10] hello;下标0123456789值hello\0字符串结束标志\0。字符串的长度是\0前面有效字符的个数。4.3 字符数组的初始化// 用字符串常量初始化 char s[10] hello; // 用字符列表初始化部分初始化后面补 0 char s[10] {h, e, l, l, o}; // 等价于 h,e,l,l,o,\0,0,0,0,0 // 省略长度由初始化值推算自动包含 \0 char s[] hello; // 数组长度为 65个字符 1个\04.4 字符串与数组的关系字符数组是存放字符串的容器。处理字符串时更关心字符串什么时候结束\0而不是数组什么时候结束。因此数组长度显得不那么重要\0才是关键。4.5 获取字符串长度strlen#include string.h size_t strlen(const char *s);功能计算字符串长度\0前面有效字符的个数。注意strlen和sizeof不同——strlen不算\0sizeof算整个数组大小。char s[10] hello; strlen(s); // 返回 5h,e,l,l,o不算 \0 sizeof(s); // 返回 10整个数组的大小4.6 字符串复制strcpy#include string.h char *strcpy(char *dest, const char *src);功能将src中的字符串复制到dest中。参数src— 字符串源数组名或字符串常量。dest— 目标数组名或存放字符串的空间地址。返回值返回dest。char s1[10] hello; char s2[10] world; strcpy(s1, s2); // s1 变为 world4.7 字符串拼接strcat#include string.h char *strcat(char *dest, const char *src);功能将src中的字符串拼接到dest末尾。参数src— 字符串源数组名或字符串常量。dest— 目标数组名或存放字符串的空间地址。返回值返回dest。char s1[20] hello; char s2[10] world; strcat(s1, s2); // s1 变为 helloworld拼接思路1.定位到\0的位置。2.从\0位置开始依次复制src中的字符。3.最后补上\0。五、总结知识点核心要点选择排序给位置选数时间复杂度 O(n²)冒泡排序相邻两两比较大的往后冒时间复杂度 O(n²)插入排序将元素插入已排序序列的正确位置时间复杂度 O(n²)二分查找前提数据有序每次排除一半最好 O(1)最差 O(logN)字符数组用来存储字符串以\0作为结束标志strlen计算字符串长度不含\0strcpy字符串复制strcat字符串拼接

相关新闻

Unity移动端性能优化:深度解析Overdraw原理与实战解决方案

Unity移动端性能优化:深度解析Overdraw原理与实战解决方案

1. 项目概述:为什么Overdraw是移动端性能的“隐形杀手”?做Unity开发,尤其是面向移动平台,性能优化是个绕不开的坎。你可能会花大力气去优化脚本逻辑、减少Draw Call、压缩贴图,但游戏运行时帧率依然不稳,手…

2026/7/23 3:07:27 阅读更多 →
GitHub Actions 自动部署:从 push 到全国可达的完整流程

GitHub Actions 自动部署:从 push 到全国可达的完整流程

GitHub Actions 自动部署:从 push 到全国可达的完整流程工具地址:https://www.speedce.com 中文界面:https://speedce.com/?langzh-CN 联系:speedceadsgmail.com写在前面 Actions 部署成功后加一步 SpeedCE 验收。 本文是一份围绕…

2026/7/23 3:07:27 阅读更多 →
新手落地 AI 数字人避坑白皮书|区分云端共享账号、低价源码、本地买断,登登 AI 试用至采购全流程复盘

新手落地 AI 数字人避坑白皮书|区分云端共享账号、低价源码、本地买断,登登 AI 试用至采购全流程复盘

摘要大量零基础创业者在采购数字人系统时,容易踩三大陷阱:几百元 “永久云端账号”、无售后低价源码包、低价买断隐藏增值收费条款。本文从技术角度区分三类方案底层风险,结合登登 AI 完整试用、部署流程,给出一套可落地的采购验收…

2026/7/23 3:06:27 阅读更多 →

最新新闻

HuggingFaceSkills:AI Agent能力扩展与实战指南

HuggingFaceSkills:AI Agent能力扩展与实战指南

1. HuggingFaceSkills概述:AI Agent的核心能力扩展HuggingFaceSkills是构建在HuggingFace生态体系上的AI Agent能力扩展模块,它让智能体能够直接调用HuggingFace平台上的数千个预训练模型和数据处理工具。想象你给Agent装备了一个多功能瑞士军刀——文本…

2026/7/23 3:45:40 阅读更多 →
渗透必备工具箱V11 (2026更新) 集成Web扫描、抓包、免杀等等

渗透必备工具箱V11 (2026更新) 集成Web扫描、抓包、免杀等等

0x01 工具介绍 水滴工具箱 (shuidi) 是一款的开源渗透测试工具集合。涵盖Web扫描、抓包、免杀等多个方面。集成了抓包、扫描器、漏扫工具、子域名爆破、js探测、OA利用、框架利用、各类组件、jndi注入、内存马、内网渗透、webshell免杀、程序免杀、内网穿透、Windows溯源工具、…

2026/7/23 3:45:40 阅读更多 →
智能驾驶车载系统数据安全需求

智能驾驶车载系统数据安全需求

序号应用名称具体应用子模块数据名称(文件1附录AB)数据主体数据种类等级分类处理活动类型(收集、存储、使用、加工、传输、提供、公开)应用场景或处理目的收集、处理该数据是否为业务开展所必须收集时涉及的敏感系统权限收集方式1…

2026/7/23 3:45:40 阅读更多 →
Windows端AI商品图工作流:素材目录、候选筛选与ZIP导出验收

Windows端AI商品图工作流:素材目录、候选筛选与ZIP导出验收

在Windows上用AI做电商商品图,最容易被忽略的并不是“会不会点生成”,而是后面的文件管理:原图被覆盖、不同SKU的候选图混在一起、挑中的版本找不到、ZIP解压后才发现少图,交付几天后也说不清对方拿到的是哪一版。 一套能重复使用…

2026/7/23 3:45:40 阅读更多 →
AI创作不用来回切换工具!创世坊一站式工坊,绘图、短视频、背景音乐一键闭环创作

AI创作不用来回切换工具!创世坊一站式工坊,绘图、短视频、背景音乐一键闭环创作

不少自媒体创作者、短视频运营、独立设计师都会遇到同一个难题:想要完成一条完整短视频,流程繁琐且工具割裂。先用AI绘图生成画面素材,保存导出图片,打开视频工具导入制作动态短片,再切换音频平台生成适配BGM&#xff…

2026/7/23 3:44:40 阅读更多 →
话轮转换沉默阈值优化:从基础原理到AI对话系统实践

话轮转换沉默阈值优化:从基础原理到AI对话系统实践

在对话系统和人机交互领域,如何准确识别对话中的"话轮转换"(turn-taking)时机一直是个关键挑战。特别是在处理人类自然对话和AI生成话语时,沉默阈值的设定直接影响着交互的流畅度和自然感。本文将从实际项目角度出发&am…

2026/7/23 3:44:40 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻