#嵌入式开发基础##Linux##C语言#前言数组是C语言重点内容分为数值数组与字符数组。本文整理排序、查找两大经典算法以及字符串基础操作。结合手写笔记梳理核心概念、复杂度与易错点配套可直接运行的C语言代码方便快速理解。一、一维数组排序选择排序、冒泡排序1. 选择排序核心思想先锁定待排序位置将该位置元素和后续所有元素依次比较升序把最小值放到待排位置降序同理。- 时间复杂度O(n^2)- 空间复杂度O(1)- 稳定性不稳定排序//升序选择排序void select_sort(int arr[], int n){int i,j,min,temp;for(i0;in-1;i){min i;for(ji1;jn;j){if(arr[j]arr[min])min j;}temp arr[i];arr[i] arr[min];arr[min] temp;}}2. 冒泡排序核心思想相邻两个元素两两对比升序将较大值向后移动一趟排序确定一个最大值。- 时间复杂度O(n^2)- 空间复杂度O(1)- 稳定性稳定排序//升序冒泡排序void bubble_sort(int arr[], int n){int i,j,temp;for(i0;in-1;i){for(j0;jn-1-i;j){if(arr[j]arr[j1]){temparr[j];arr[j]arr[j1];arr[j1]temp;}}}}排序稳定性定义序列中存在两个相等数据排序完成后二者相对位置不变 → 稳定反之不稳定。二、查找算法1. 顺序遍历查找- 复杂度O(n)- 特点数组有序/无序都能用效率较低2. 二分查找核心思想仅适用于有序数组。拿目标值和序列中间元素对比中间值 目标值 → 在后半段查找中间值 目标值 → 在前半段查找相等 → 查找成功- 时间复杂度O(\log_2n)- 优势大数据量下查找效率极高int binary_search(int arr[], int len, int key){int left0,rightlen-1,mid;while(left right){mid (leftright)/2;if(arr[mid]key)return mid;else if(arr[mid]key)left mid1;elseright mid-1;}return -1; //查找失败}三、字符型数组字符串1. 基础定义char 数组名[常量];//示例char str[32];访问方式 数组名[下标]⚠ 重点防止数组下标越界2. 初始化char str[32] {h,e,l,l,o,\0};char str[] hello; //自动末尾补充 \0未完整初始化的字符数组系统默认填充 \03. 内存特性唯一性、有序性、地址连续性4. strlen vs sizeof- strlen(str) 统计有效字符个数不包含结束符 \0 需要头文件 string.h - sizeof(str) 统计数组占用内存总字节数5. 常用字符串函数头文件必须引入 #include string.h1. strcpy(dst,src) 字符串拷贝源字符串复制到目标数组2. strcat(dst,src) 字符串拼接源字符串追加到目标末尾3. strcmp(s1,s2) 字符串比较- 返回 0s1 s2- 返回 0s1 s2- 返回 0s1 s2小结本文梳理了C语言数组两大板块数值数组与字符数组。数值数组重点掌握选择排序、冒泡排序两种基础排序算法分清二者稳定性差异查找算法需要牢记顺序查找与二分查找适用场景二分查找必须依托有序数组拥有更高查找效率。字符数组也就是字符串核心要点是结束符 \0 分清 strlen 和 sizeof 的区别熟练使用 strcpy 、 strcat 、 strcmp 字符串操作函数。