C语言进阶之——数组
2026/7/27 20:32:43 网站建设 项目流程

今天系统学习了C语言一维数组相关知识,熟悉数组基础操作,重点弄懂冒泡排序和选择排序两种基础算法,在这里整理知识点分享给大家。

一、一维数组基础

  1. 数组定义
    数组可以存储一组数据类型相同的数据,所有元素在内存里连续存放。
    书写格式:
    数据类型 数组名[元素数量];
    注意:方括号内的元素数量只能写常量,不能直接使用变量。

  2. 数组元素访问
    读取、修改元素格式:数组名[下标]
    数组下标从0开始,有效区间是 0 ~ 元素个数-1。下标可以填写常量、变量或者表达式。
    千万不要访问超出范围的下标,也就是数组越界,程序会出现无法预料的错误。

  3. 计算数组长度
    不用手动去数元素个数,可以借助sizeof自动计算:
    int len = sizeof(a)/sizeof(a[0]);
    sizeof(a) 获取整个数组占用的总字节,sizeof(a[0]) 代表单个元素占用字节,两者相除得到元素总数。

  4. 数组初始化
    完整初始化
    int a[5]={1,2,3,4,5};
    部分初始化,没有赋值的元素默认自动置0
    int a[5]={1,2,3};
    省略数组长度,编译器根据初始化内容自动判定长度
    int a[]={1,2,3,4,5};
    注意:数组没办法整体赋值,如果需要修改所有元素,只能通过循环逐个操作。

二、数组常见基础应用

  1. 通过循环读取控制台输入的数据存入数组,也能循环遍历打印全部元素;
  2. 遍历数组查找最大值、最小值,同时记录最值所在的下标;
  3. 数组逆置:交换数组前后对应的元素,循环条件设置为 i < len/2。

三、冒泡排序
核心原理:
不断对比相邻的两个元素,如果大小不符合排序要求就交换二者。每一轮循环结束后,未排序区域中最大的元素会排到末尾。
外层循环:控制一共需要多少轮排序,总共执行 len-1 轮
内层循环:负责相邻元素对比交换。每一轮结束后末尾多出一个有序数据,所以内层循环边界要减去已经完成排序的轮次。
for(j = 0; j < len-1; j++)
{
for(i = 0; i < len-1-j; i++)
{
if(a[i] > a[i+1])
{
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
四、选择排序
核心原理:
先暂定当前位置的元素是最小值,接着向后遍历还没有排序的数据,找到真正最小值的下标。一轮遍历结束后,把最小值交换到当前位置。

简单区分两种排序:冒泡排序会频繁交换相邻元素;选择排序每一轮最多只交换一次。

外层循环:依次确定数组每一个位置最终存放的数据
内层循环:在未排序区间寻找最小值对应的下标
for(j = 0; j < len-1; j++)
{
int min = j;
for(i = j+1; i < len; i++)
{
if(a[i] < a[min])
{
min = i;
}
}
if(min != j)
{
int tmp = a[j];
a[j] = a[min];
a[min] = tmp;
}
}

在学习冒泡排序和选择排序的过程中我们应该注意:

  1. 分清两层循环各自的作用,外层控制排序轮次,内层完成元素比较或者查找最值;
  2. 循环边界不能随意改动,边界出错容易出现排序不完全、数组越界等问题;
  3. 理解两种排序各自的逻辑,不要混淆代码结构。

最后,数组是批量处理数据非常重要的工具,冒泡、选择排序也是入门算法。大家不用死记硬背代码,试着一步步推演循环运行过程,多敲多练,更容易吃透算法逻辑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询