当前位置: 首页 > news >正文

数组排序与

一、数组基础存储特性
数组拥有三大核心特点,分别是单一性、有序性与连续性。单一性指数组内所有元素的数据类型完全统一,不能混合存放整型、字符型等不同类型数据;有序性代表元素严格按照下标 0、1、2……n 的顺序依次排列;连续性是数组在内存中开辟一整块连续的空间存储所有元素,不会分散存放。
数组越界是高频易错点,分为两种场景。第一种是数组初始化时,提供的初始化元素数量超过数组定义的容量;第二种是访问元素时,下标数值超出合法区间。数组越界会读写未知内存,引发乱码、程序崩溃等问题,编写代码时必须严格控制下标范围。
二、数组基础练习题考点
输入 10 个整数存入数组并求和:核心思路是循环接收输入存入数组,再遍历全部元素累加;
查找数组最大值:假定首个元素为最大值,依次遍历后续元素对比,遇到更大数值则更新最大值;
查找数组最小值:逻辑与找最大值一致,仅对比条件更换为更小数值。
三、数组排序算法详解
排序分为升序、降序两种需求,课堂重点讲解选择排序、冒泡排序两类基础排序,二者时间复杂度均为 O (n²),空间复杂度 O (1),仅需额外一个临时变量完成交换,不占用额外数组空间。

  1. 选择排序
    核心思想:固定当前待排序下标,遍历该下标之后所有元素,升序场景下找到区间内最小值,与当前位置元素交换,一轮循环确定一个位置的有序数值。
    稳定性判定标准:排序前后,数组中相等数字的相对顺序不改变即为稳定排序,反之则不稳定。选择排序属于不稳定排序,远距离交换元素容易打乱等值元素原有位置。
  2. 冒泡排序
    核心思想:相邻两个元素两两对比,升序排序时若前数大于后数则交换,每一轮遍历会把当前区间内最大数值移动到区间末尾固定。
    冒泡排序是稳定排序,只有前值大于后值时才执行交换,数值相等不会发生操作,能够保留相同数字原本的先后顺序。
  3. 插入排序
    基础排序算法之一,核心逻辑是将数组分为有序区与无序区,逐个取出无序区元素插入有序区对应位置,完成整体排序。
    四、二分查找(折半查找)
    前置硬性条件
    待查找的数组序列必须提前完成有序排序,无序数组无法使用二分查找。
    核心思路(升序数组)
    设置左右边界标记查找区间,不断计算区间中间下标,用中间元素和目标数值对比:目标值更大则舍弃左半区间,更新左边界;目标值更小则舍弃右半区间,更新右边界;数值相等即查找成功。循环终止条件为左边界大于右边界,代表区间内不存在目标数字。
    算法优势
    相比逐个遍历的顺序查找,二分查找每次直接缩小一半查找范围,时间复杂度为 O (logn),数据量越大效率优势越明显。
    五、字符型数组(字符串底层)
    字符数组主要作用是存储单个字符,也可组合存储完整字符串,是 C 语言实现字符串的底层载体。
  4. 定义格式
    标准写法为 char 数组名 [常量数值],常量代表数组总字节容量,例如 char str [32] 会分配 32 字节连续内存空间。访问元素依靠下标,如 str [0] 获取数组第一个字符,使用时同样需要规避下标越界。
  5. 字符数组初始化规则
    完整字符初始化:逐个书写单引号包裹的字符,这种写法不会自动补充字符串结束符 \0,不能直接当作字符串打印;
    双引号字符串初始化:使用双引号包裹文字赋值,编译器会自动在末尾追加 \0 作为字符串结束标记,省略数组长度时,数组容量会自动在字符总数基础上多分配 1 字节存放 \0;
    局部初始化:定义大容量数组,仅填写部分字符,未初始化的内存位置默认填充 0,等同于结束符 \0;
    全零初始化:直接赋值 {0} 或 {‘\0’},数组全部空间初始化为字符串结束符。
  6. 易混淆 ASCII 知识点
    数字 0 对应 ASCII 码数值 0,等价于字符串结束符 \0;字符 '0’ASCII 码为 48,二者完全不同;字符串 “0” 包含两个内容,字符 ‘0’ 和末尾自动添加的 \0。
  7. 存储特性
    字符数组同样遵循数组三大基础特性:全部元素统一为 char 类型、按下标顺序有序排列、内存占用连续空间。所有完整字符串操作,都依赖末尾的 \0 判断字符读取终止位置,缺少结束符会造成读取乱码、内存越界。
http://www.jsqmd.com/news/1291897/

相关文章:

  • 终极指南:一键永久保存QQ空间十年青春记忆的免费开源工具
  • 浏览器隐私守护者:uBlock Origin如何重塑您的网络体验
  • DLSS Swapper终极指南:如何一键升级游戏DLSS版本提升性能
  • 逆向实战:深度解析抖音a_bogus参数JSVMP保护与算法还原
  • 深入解析RS-232/422/485串口通信:从差分信号到Modbus实战
  • 别再盲目选!2026年AI论文写作工具红黑榜,选对工具少走弯路
  • 深入Linux USB Hub驱动:从原理到调试,解决设备识别与枚举问题
  • Go-Micro微服务安全终极实践:从认证授权到数据加密的纵深防御
  • Wireshark网络抓包实战:从TCP三次握手到HTTPS解密
  • 5步掌握BilibiliDown:轻松下载B站Hi-Res无损音频的终极方案
  • 从零搭建规范STM32工程:CubeMX配置与Keil分层架构实战
  • Unity天空盒制作:从全景图到Cubemap的完整实现
  • 玉石复检全流程教学:新手也能自主验货、维权有据
  • 无审查模型与国内通用模型对比
  • KKCE:在线Ping 工具多场景应用与实战指南-快快测
  • Windows下CPython 3.12.1源码编译与调试环境搭建指南
  • 海阳市防水补漏_2026山东东部黄海之滨核电名城漏水维修价格行情与五大正规团队推荐 - 雨婺虹房屋维修
  • 漏洞挖掘趋势:符号执行与 Fuzzing 的融合路径
  • X-AnyLabeling终极指南:免费高效的AI图像标注工具,10倍提升标注效率
  • Qt程序调试实战:内存管理、线程安全与资源访问崩溃排查指南
  • 校园问卷调查与数据分析平台的设计与实现
  • 本地代码大模型评测实战(四):8个坑和1个崩溃
  • 青州市防水补漏_2026鲁中古城海岱明珠漏水维修避坑指南与五大正规团队推荐 - 雨婺虹房屋维修
  • KKCE:路由追踪技术实战从网络诊断到安全防御的全场景应用-快快测
  • 高通平台底层通信与相机调优:从QMI机制到Camera Tuning实战
  • 2026年最新!找北京靠谱机器狗销售厂家必看的完整名单
  • Elasticsearch核心操作指南:索引、文档与映射的实战解析
  • STM32低功耗设计实战:从睡眠到关机的模式选择与代码实现
  • 当AI误判偏瘫患者肩关节代偿动作时——康复工程师紧急修复的6小时实战复盘(含实时反馈日志)
  • PLC编程指令实战指南:从信号流、数据流到时间流的系统化应用