4. 数组和排序算法1
1. 数组的定义
一组相关变量的集合
一个数组实际上就是一连串的变量
数组中的变量必须是相同的数据类型
数组可以分为一维数组、二维数组和多维数组
例如:numbers[100]来代替直接声明100个独立变量number0,number1,....,number99
2. 一维数组
2.1 数组的声明
两种声明方式:
数据类型[] 数组名 //首选
数据类型 数组名[] //效果相同,C语言的格式,不推荐
举例:
int[] myList //推荐
int myList[] //不推荐
2.2 数组的初始化
2.2.1 动态初始化
数组定义与为数组分配空间和赋值的操作分开进行
数组名 = new 数组类型[数组大小]
例如:
myList = new int[10];
2.2.2 静态初始化
在定义数组的同时就为数组元素分配空间并赋值
数组名 = {元素1,元素2,元素3,….}
数组名 = 数组类型[]{元素1,元素2,元素3,….}
例如:
int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};
2.2.3 错误的初始化
int[] month_days = new int[12];
month_days = {31,28,31,30,31,30,31,31,30,31,30,31};
注意:只能在数组声明时用大括号对来自定义数据,否则只能分别对每个下标元素进行赋值
int[] month_days = new int[12];
month_days[0] = 31;
month_days[1] = 28;
……
2.3 一维数组练习和实践
1、数组名表示什么?
2、arr[0]表示什么?
3、怎么获取数组长度?
4、如何使用数组下标取值?
5、如何使用数组遍历取值 for & foreach ?
6、如何给数组所有元素求和?
7、如何找出数组种最大值,最小值?
8、数组的深复制,浅复制有何不同?
9、练习:一个班有10个同学的数学成绩需要记录,要计算班级成绩总和,平均成绩,最高分,最低分,及格人数等数据。
int[] studentScores = { 55, 66, 77, 88, 35, 89, 90, 52, 22, 76 };
int studentScores[] = { 55, 66, 77, 88, 35, 89, 90, 52, 22, 76 };
3. 二位数组
3.1 声明与初始化
3.1.1 声明
int[][] a; //推荐
int a[][]; //不推荐
3.1.2 初始化
-
动态初始化
数据类型[][] 数组名称 = new 数据类型 [行数][列数] ;
例如:
int [][] num = new int [3][3]; //定义了三行三列的二维数组 num[0][0] = 1; //给第一行第一个元素赋值 num[0][1] = 2; //给第一行第二个元素赋值 num[0][2] = 3; //给第一行第三个元素赋值 num[1][0] = 4; //给第二行第一个元素赋值 num[1][1] = 5; //给第二行第二个元素赋值 num[1][2] = 6; //给第二行第三个元素赋值 num[2][0] = 7; //给第三行第一个元素赋值 num[2][1] = 8; //给第三行第二个元素赋值 num[2][2] = 9; //给第三行第三个元素赋值
-
静态初始化
数据类型 [][] 数组名称 = {{第一行元素},{第二行元素},...} ; 数据类型 [][] 数组名称 = new 数组类型{{第一行元素},{第二行元素},...} ;
例如:
int[][] num = {{1,2,3},{4,5,6},{7,8,9}}; int[][] num = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
二维数组其实就是矩阵
3.2 二维数组练习
案列:某校幼儿园有3个班,每个班有5个人,计算各班平均年龄?计算全园平均年龄?计算总人数?
int students[][] = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };
int[][] students = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };
4. 排序算法
4.1 冒泡排序(必须掌握)