(内容为学习笔记,如有错误,还望指正,如有遗漏,还望补充)
1.冒泡排序
1)作用
上节说到了一维整型数组,可以将很多个整型变量存储在一块,但是当我们需要整理这个数组的数据时会非常的不方便,这时候就需要对数组进行排序处理,让数组数据有变得有序。
为了方便数据处理,我们经常需要排序。排序的方法不止冒泡排序。为什么学习冒泡?因为它好写。冒泡排序是排序效率最低的排序方法之一。
2)冒泡排序的原理
以将数组数据排成升序为例。
冒泡的原理(升序):比较数组中相邻的两个元素,前者大于后者,交换两个元素的值。
例如有数组 "a[7] = {7,6,3,4,5,2,1};",冒泡排序的过程如下。
a.取a[0]元素,值7,与他后面的每一个元素进行比较,大于a[1],a[0]与a[1]的值互换;
b.此时的数组a元素为{6,7,3,4,5,2,1},接下来比较a[1]==7和a[2] ==3,交换。。。以此类推,最后7会被交换到最后,即a[7] = {6,3,4,5,2,1,7};
c.接下来重复上两个步骤,但是比较的过程中可以少比较1位(之后是前面比较过的次数n位),这样最后数组a就会以升序排列,即a[7] = {1,2,3,4,5,6,7};
3)具体代码
a.冒一个泡的过程
int main()
{
int a[] = {85, 72, 65, 79, 53, 95, 87};
int i;
//循环遍历整个数组,因为数组有7个数,所以我们需要比较7-1次
for(i = 0;i < 7-1;i++)
{
if(a[i] > a[i+1])//比较相邻两个元素
{
//前者大于后者,就交换两个元素的值
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
//此时完成冒泡,输出查看结果
for(i = 0;i < 7;i++)
{
printf("%d ", a[i]);//72 65 79 53 85 87 95
}
printf("\n");
return 0;
}
b.冒泡全过程
int main()
{
int a[] = {85, 72, 65, 79, 53, 95, 87};
int i,j;
//反复进行冒泡,需要进行N-1次冒泡,数组有序
for(j = 0;j < 7-1;j++)
{
//内层循环用来冒一个泡,-j的目的是因为每一轮冒泡都比上一轮少比较一次
for(i = 0;i < 7-1-j;i++)
{
if(a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
//输出结果
for(i = 0;i < 7;i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
2.二维数组
1)二维数组的本质
数组元素是一维数组的数组。
2)如何定义二维数组
int a[2][3];
//[2]说明a是有2个元素组成的数组。
//[3]说明a的每个元素,是一个3个元素组成的一维数组。
//int 说明作为a的子数组元素类型是int。
//这样的数组a我们简称为二维数组。
3)如何给二维数组元素赋值
a[0][1] = 10;//a[0]数组的1元素赋值 10 是int变量
a[1][2] = 20;//a[1]数组的2元素赋值 20 是int变量
//那么能不能给a[0]赋值呢?
//不能,数组不能被整体赋值,只能对元素赋值,如果元素还是数组,那么就得对元素的元素赋值。
4)如何遍历二维数组
使用双重for循环来遍历二维数组。
int main()
{
int a[2][3];
int i, j;
for(i = 0;i < 2;i++)//遍历数组a,数组a有2个元素 分别是a[0]和a[1]
{
//遍历子数组
/*
i = 0时,遍历a[0]数组 a[0]数组有3个元素
i = 1使,遍历a[1]数组 a[1]数组有3个元素
*/
for(j = 0;j < 3;j++)
{
a[i][j] = i*j;//a[i][j]是一个整型变量
printf("%d\n", a[i][j]);
}
}
return 0;
}
5)二维数组初始化
同一维数组一样,有默认初始化,部分初始化和完全初始化三种方法。
默认初始化:
在二维数组中,第一个角标表示数组的元素个数,所以默认初始化的时候,只有第一个角标可以省略。 第二个角标表示数组的元素类型,所以第二个角标一定不能省略。
int a[][3] = {{1,2,3},{4,5,6}};
int a[][3] = {1,2,3,4};
//默认补0
部分初始化:
int a[2][3] = {1,2,3};
int a[2][3] = {{1},{2,3}};
//默认补0
完全初始化:
int a[2][3] = {{1,2,3},{4,5,6}};
int a[2][3] = {1,2,3,4,5,6};
//在完全初始化中,里面的{}写不写无所谓
6)二维数组的类型
二维数组的类型,实际上是数组中一维数组的元素类型。
//整型
int a[2][3];
//字符型
char b[2][3];