【C语言入门必看】数组排序、二分查找与字符数组全解析
前言数组是C语言中最基础、最常用的数据结构之一。掌握数组的排序、查找以及字符数组的操作是每位C语言学习者的必经之路。本文将带你深入理解选择排序、冒泡排序、二分查找的原理与实现并详细讲解字符数组的定义、初始化、输入输出及常用操作方法。文章结构清晰代码示例丰富助你快速掌握核心知识点。1. 数组排序排序算法是数据处理的基础。下面介绍两种经典的排序算法选择排序和冒泡排序。1选择排序核心思想每一轮从未排序部分中选出最小或最大的元素放到已排序部分的末尾。时间复杂度O(n²)空间复杂度O(1)稳定性选择排序是一种不稳定的排序算法。因为在交换过程中相等元素的相对位置可能会发生变化。#include stdio.h int main(void) { int arr[10] {2, 5, 4, -8, 0, 9, 4, 50, 32, -54}; int len sizeof(arr) / sizeof(arr[0]); int tmp 0; for (int i 0; i len - 1; i) { for (int j i 1; j len; j) { if (arr[i] arr[j]) // 排升序 排降序 { tmp arr[i]; arr[i] arr[j]; arr[j] tmp; } } } for (int i 0; i len; i) { printf(arr[%d] %d\n, i, arr[i]); } return 0; }2冒泡排序核心思想重复地遍历待排序序列依次比较相邻的两个元素如果顺序错误就交换它们直到没有需要交换的元素为止。时间复杂度O(n²)空间复杂度O(1)稳定性冒泡排序是一种稳定的排序算法。因为只有相邻元素比较并交换相等元素的相对位置不会改变。#include stdio.h int main(void) { int arr[10] {1, -5, 40, 39, 0, -25, 69, 44, 3, 21}; int len sizeof(arr) / sizeof(arr[0]); int tmp 0; for (int j 0; j len - 1; j) { for (int i 0; i len - 1 - j; i) { if (arr[i] arr[i 1]) // 排升序 排降序 { tmp arr[i]; arr[i] arr[i 1]; arr[i 1] tmp; } } } for (int i 0; i len; i) { printf(arr[%d] %d\n, i, arr[i]); } return 0; }2. 二分查找折半查找前提条件待查找的序列必须是有序的。核心思想升序为例将待查找的值与序列中间位置的元素进行比较。如果比中间值大则在右半部分继续查找如果比中间值小则在左半部分继续查找如果相等则查找成功。优势查找效率高时间复杂度为 O(log n)。#include stdio.h int main(void) { int arr[10] {50, -1, 2, 3, -4, 5, 6, -7, 64, 9}; int len sizeof(arr) / sizeof(arr[0]); int num 0; // 先对数组进行排序这里使用选择排序 for (int i 0; i len - 2; i) { for (int j i 1; j len - 1; j) { if (arr[i] arr[j]) { int tmp arr[i]; arr[i] arr[j]; arr[j] tmp; } } } for (int i 0; i len; i) { printf(arr[%d] %d\n, i, arr[i]); } printf(Please input a number:\nnum ); scanf(%d, num); // 二分查找 int i 0; int j len - 1; int mid 0; while (i j) { mid (i j) / 2; if (num arr[mid]) { i mid 1; } else if (num arr[mid]) { j mid - 1; } else { printf(Found the number!\narr[%d] %d\n, mid, num); break; } } if (i j) { printf(Not Found!\n); } return 0; }3. 字符型数组字符型数组用于存储字符串即多个字符。1字符数组定义char 数组名[常量]; // 数组名遵循标识符的命名规则。 char str[32]; // 分配32个字节的空间2字符型数组的访问数组名[下标]; // 例如 str[0]; // 访问第一个字符 // 注意下标不能越界否则会导致未定义行为。3字符型数组的初始化全部初始化char str[5] {h, e, l, l, o}; char str[] {h, e, l, l, o}; char str[] {hello}; char str[] hello; // 当[]中的常量被省略时数组空间大小由初始化字符个数决定并自动在末尾添加\0。局部初始化char str[32] {h, e, l, l, o}; char str[32] {hello}; char str[32] hello; // 未初始化的部分默认存储0即\0字符。初始化为全0char str[32] {0}; char str[32] \0;4数组的存储形式单一性数组中的所有元素数据类型必须一致。有序性数组元素按照下标顺序a[0] 到 a[n]连续存储。连续性数组在内存中占用一段连续的空间。5字符型数组的输入输出输入char str[32] {0}; scanf(%s, str); // 遇到空格、Tab、回车会停止读入 gets(str); // 读取一行包括空格但不推荐使用存在缓冲区溢出风险输出char str[32] hello world!; printf(%s\n, str); // 遇到空格、Tab、回车会停止打印 puts(str); // 输出字符串并自动换行6字符型数组的操作方法strlen(str)计算字符串长度有效字符个数不包含结尾的\0。sizeof(str)求字符数组在内存中所占的字节数取决于数组声明时的大小。strcpy(dest, src)将源字符串拷贝到目标字符串。strcat(dest, src)将源字符串拼接到目标字符串的末尾。

相关新闻

HC毛发插件实战:游戏角色高效插片发型制作与优化

HC毛发插件实战:游戏角色高效插片发型制作与优化

1. 先搞清楚HC毛发插件到底解决什么实际问题如果你在3D角色建模,尤其是游戏角色头发制作时遇到过这些问题:手动一根根摆毛发片效率太低、毛发层次和动态感不好控制、想要实现次世代游戏里那种真实又性能友好的发型效果,那HC毛发插件值得先花半…

2026/10/14 11:04:22 阅读更多 →
终极Paradox游戏模组冲突解决方案:IronyModManager深度技术指南

终极Paradox游戏模组冲突解决方案:IronyModManager深度技术指南

终极Paradox游戏模组冲突解决方案:IronyModManager深度技术指南 【免费下载链接】IronyModManager Mod Manager for Paradox Games. Official Discord: https://discord.gg/t9JmY8KFrV 项目地址: https://gitcode.com/gh_mirrors/ir/IronyModManager IronyMo…

2026/10/14 11:04:26 阅读更多 →
深入理解Java字节码:javap工具核心功能与实战应用指南

深入理解Java字节码:javap工具核心功能与实战应用指南

1. 项目概述:为什么我们需要深入理解javap在Java开发的世界里,我们每天都在和.class文件打交道。这些由编译器生成的字节码文件,是JVM能够理解和执行的“中间语言”。大多数时候,我们信任编译器,写好.java源码&#xf…

2026/10/10 11:47:18 阅读更多 →

最新新闻

第2章:Linux 基础,pwd 命令

第2章:Linux 基础,pwd 命令

专栏导航 上一篇:第2章:Linux 基础,date 命令 回到目录 下一篇:第2章:Linux 基础,whoami 命令 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真…

2026/10/14 11:05:15 阅读更多 →
UE4 C++静态加载SkeletalMesh与动画蓝图完整实操

UE4 C++静态加载SkeletalMesh与动画蓝图完整实操

我们接着往下写。这是“基于C代码的UE4学习”系列第三十八篇,这次主题很聚焦:用C代码把 SkeletalMesh 加载到角色身上,并且静态加载一个动画蓝图。很多人在这个阶段会开始纠结——明明蓝图里拖个引用、拉个变量就行,为什么偏要用代…

2026/10/14 11:05:15 阅读更多 →
Kotlin泛型深度解析:类型擦除、型变与reified实战

Kotlin泛型深度解析:类型擦除、型变与reified实战

1. 从类型擦除说起:为什么Kotlin泛型值得单独开一个专题很多人学Kotlin泛型的时候,第一反应是"这不就是Java那套吗"。我一开始也这么想,直到在一个数据解析模块里踩了个坑——写了一个看似完美的泛型转换函数,编译通过&…

2026/10/14 11:05:15 阅读更多 →
重积分建模本质:从物理直觉到高维应用

重积分建模本质:从物理直觉到高维应用

1. 为什么重积分的应用远不止“算体积”——从物理建模到几何直觉的跃迁很多人学完二重积分,脑子里只留下一个公式:∬_D f(x,y) dσ。考试时套用极坐标换元、画个积分区域、算个数值,就以为掌握了。但我在带某高校数学分析实验课时发现&#…

2026/10/14 11:05:15 阅读更多 →
libxl 4.1.1带注册信息:C++离线生成Excel报表实践

libxl 4.1.1带注册信息:C++离线生成Excel报表实践

简介:libxl4.1.1 带注册信息资源包,聚焦高效轻量级 Excel 读写库的跨平台集成,面向需要将 Excel 处理能力嵌入应用的 C/C、C# 开发者,重点梳理 API 调用、依赖库、编译选项以及注册授权验证在 Windows 与 Linux 环境下的差异&…

2026/10/14 11:05:15 阅读更多 →
航空订票系统UML建模:用例图、时序图与类图实战指南

航空订票系统UML建模:用例图、时序图与类图实战指南

简介:航空订票系统是典型的信息管理系统设计案例,适合软件工程、系统分析与设计课程的学生,以及正在学习UML建模的开发者参考。资源以UML可视化建模为主线,覆盖用例图、类图、包图、顺序图、协作图、状态图、活动图、组件图与部署…

2026/10/14 11:04:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →