深入解析:嵌入式学习Day7

第7章 数组(*重难点)

1.一维数组

格式:
类型说明符 数组名[整型表达式];
例:float f[10000];

数组在内存中存放的三大特性:

1)单一性:每个元素占用的空间相同
2)连续性:各元素之间紧密联系在一起
3)有序性:各元素按顺序依次存放

注意事项:
1)数组不能被整体赋值
2)数组的数组名代表的是数组的首元素的地址
3)严禁数组的越界访问(例:定义了数组a[10],但是后续又给数组以外的部分赋值,如a[10]=1,这样就造成了越界访问)

补充:

int a[10] = {1,2,3,4,5,6,7,8,9,0};
初始化列表赋值个数不足且至少有一个时,其余值均为0;a[10]中10可省略,编译器会根据初始化列表里的数据个数自动填入

int len = sizeof(a) / sizeof(a[0]);
上式用来计算数组元素个数

由变量指定的数组在程序编写时不能被初始化
如:int n =10;
int a[n] = {1,2,3,4,5};
这样是不被允许的

2.排序

1)逆序
将一个数组逆序打印

int main(void)
{
int a[] = {1,2,3,4,5};
int i;
int len = sizeof(a) / sizeof(a[0]);
for(i = 0;i < len / 2;++i)
{
int t;
t = a[i];
a[i] = a[len - i - 1];
a[len - i - 1] = t;
}
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
return 0;
}

2)选择排序
在合适的位置放上合适的数

int main(void)
{
int a[] = {4,6,2,1,7,3,8,9,5};
int i, j;
int len = sizeof(a) / sizeof(a[0]);
for(i = 0;i  a[j])
{
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
return 0;
}

3)冒泡排序
两个相邻元素两两比较,小的放前,大的放后

int main(void)
{
int a[] = {4,6,2,1,7,3,8,9,5};
int i, j;
int len = sizeof(a) / sizeof(a[0]);
for(j = len - 1;j > 0;--j)
{
for(i = 0;i  a[i + 1])
{
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
return 0;
}

4)插入排序
新建一个数组b,将a中数据依次插入

int main(void)
{
int a[] = {4,6,2,1,7,3,8,9,5};
int len = sizeof(a) / sizeof(a[0]);
int i;
int b[len];
b[0] = a[0];
for(i = 1; i  0 && b[j - 1] > t)
{
b[j] = b[j - 1];
--j;
}
b[j] = t;
}
for(i = 0;i < len;++i)
{
a[i] = b[i];
}
for(i = 0;i < len;++i)
{
printf("%d\n", a[i]);
}
return 0;


原地插入排序
只在数组a内插入,以后说插入排序默认为原地插入排序

代码只需将上面的数组b都换成a即可

posted @ 2025-07-28 12:20  yjbjingcha  阅读(8)  评论(0)    收藏  举报