C语言进阶之——数组
今天系统学习了C语言一维数组相关知识熟悉数组基础操作重点弄懂冒泡排序和选择排序两种基础算法在这里整理知识点分享给大家。一、一维数组基础数组定义数组可以存储一组数据类型相同的数据所有元素在内存里连续存放。书写格式数据类型 数组名[元素数量];注意方括号内的元素数量只能写常量不能直接使用变量。数组元素访问读取、修改元素格式数组名[下标]数组下标从0开始有效区间是 0 ~ 元素个数-1。下标可以填写常量、变量或者表达式。千万不要访问超出范围的下标也就是数组越界程序会出现无法预料的错误。计算数组长度不用手动去数元素个数可以借助sizeof自动计算int len sizeof(a)/sizeof(a[0]);sizeof(a) 获取整个数组占用的总字节sizeof(a[0]) 代表单个元素占用字节两者相除得到元素总数。数组初始化完整初始化int a[5]{1,2,3,4,5};部分初始化没有赋值的元素默认自动置0int a[5]{1,2,3};省略数组长度编译器根据初始化内容自动判定长度int a[]{1,2,3,4,5};注意数组没办法整体赋值如果需要修改所有元素只能通过循环逐个操作。二、数组常见基础应用通过循环读取控制台输入的数据存入数组也能循环遍历打印全部元素遍历数组查找最大值、最小值同时记录最值所在的下标数组逆置交换数组前后对应的元素循环条件设置为 i len/2。三、冒泡排序核心原理不断对比相邻的两个元素如果大小不符合排序要求就交换二者。每一轮循环结束后未排序区域中最大的元素会排到末尾。外层循环控制一共需要多少轮排序总共执行 len-1 轮内层循环负责相邻元素对比交换。每一轮结束后末尾多出一个有序数据所以内层循环边界要减去已经完成排序的轮次。for(j 0; j len-1; j){for(i 0; i len-1-j; i){if(a[i] a[i1]){int tmp a[i];a[i] a[i1];a[i1] tmp;}}}四、选择排序核心原理先暂定当前位置的元素是最小值接着向后遍历还没有排序的数据找到真正最小值的下标。一轮遍历结束后把最小值交换到当前位置。简单区分两种排序冒泡排序会频繁交换相邻元素选择排序每一轮最多只交换一次。外层循环依次确定数组每一个位置最终存放的数据内层循环在未排序区间寻找最小值对应的下标for(j 0; j len-1; j){int min j;for(i j1; i len; i){if(a[i] a[min]){min i;}}if(min ! j){int tmp a[j];a[j] a[min];a[min] tmp;}}在学习冒泡排序和选择排序的过程中我们应该注意分清两层循环各自的作用外层控制排序轮次内层完成元素比较或者查找最值循环边界不能随意改动边界出错容易出现排序不完全、数组越界等问题理解两种排序各自的逻辑不要混淆代码结构。最后数组是批量处理数据非常重要的工具冒泡、选择排序也是入门算法。大家不用死记硬背代码试着一步步推演循环运行过程多敲多练更容易吃透算法逻辑。