1、数组的概念:
相同类型n个元素的有限集合(数组类型必须相同,元素个数必须有限个)
数组的定义:
数组类型 数组名[元素个数];//(元素个数必须为常量)
int a[5]; //定义一个大小为5的数组
2、数组下标的访问:
数组明[元素下标];(数组的下标可以是常量,可以是变量,可以是表达式)
数组的元素下标的范围为从0开始,元素 - 1结束,访问之外的元素会产生内存越界
a[0];//数组下标为0的元素
3、数组的初始化:
初始化 != 赋值
//全部初始化
int a[5] = {1, 2, 3, 4, 5};//给数组中每个元素都赋上初值
//局部初始化
int a[5] = {1, 3, 4};//只给数组中部分赋上初值,没有给定初值的会被初始化为0
int a[5] = {1,, 4, 5};//下标为1,4的元素初值为0
//零初始化
int a[5] = {0};//全部初值为0
//默认初始化
int a[] = {1, 2, 3, 4, 5};//初始化一个数组大小的数组
4、数组的储存:
1、数组的储存空间 = 每个元素所占空间大小 * 元素个数
2、存放的空间之间是连续性的
3、存放元素的顺序是有序的
5、数组的操作:
从终端输入和输出
#include<stdio.h>
int main(void)
{
int a[5] = {0};
int i = 0, len = 0;
//len 表示数组的长度
len = sizeof(a) / sizeof(a[0]);//sizeof(a)获取数组a所占内存的大小,
//sizeof(a[0])表示a[0]所占内存的大小
//从终端接受数据放入数组
for(i = 0; i < len; i++)
{
scanf("%d", &a[i]);
}
//向终端打印数组
for(i = 0; i < len; i++)
{
printf("%d", a[i]);
}
return 0;
}
6、数组的常见排序:
冒泡排序:重复地遍历待排序的数组,比较相邻元素,并在它们的顺序错误时交换它们的
位置(顺序错误:前面的元素大于后面的元素),最终实现从小到大排序
算法的实现步骤:
从数组的第一个元素开始,依次比较相邻的两个元素。
如果它们的顺序错误(前面的元素大于后面的元素),则交换它们。
每一轮遍历后,最大的元素会被“冒泡”到数组的末端。
重复上述步骤,直到整个数组有序。
#include<stdio.h>
int main(void)
{
int a[5] = {0};
int i = 0, len = 0, val = 0, j = 0;
len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; i++)
{
scanf("%d", &a[i]);
}
for(i = 0; i < len -1; i++)
{
for(j = 0; j < len - 1-i; j++)
{ if(a[j] > a[j + 1])
{
val = a[j];
a[j] = a[j + 1];
a[j + 1] = val;
}
}
}
for(i = 0; i < len; i++)
{
printf("%d", a[i]);
}
return 0;
}
选择排序:通过每次遍历数组,找出最小或最大的元素,并将其与当前未排序部分的第一个
元素交换,直到数组完全有序
算法实现:
从数组的第一个元素开始,找到最小的元素。
将找到的最小元素与当前遍历到的元素交换。
重复以上过程,直到数组有序。
#include<stdio.h>
int main(void)
{
int a[5] = {0};
int i = 0, len = 0, min = 0, j = 0, val = 0;
len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; i++)
{
scanf("%d", &a[i]);
}
for(i = 0; i < len - 1; i++)
{
min = i;
for(j = i + 1; j < len; j++)
{
if(a[min] > a[j])
{
min = j;
}
}
if(min != i)
{
val = a[i];
a[i] = a[min];
a[min] = val;
}
}
for(i = 0; i < len; i++)
{
printf("%d", a[i]);
}
return 0;
}