04_数组
一维数组
数组:它是一个线性数据结构,用于存储一组相同数据类型的数据(长度一经定义不可改变)
数组结构概述
数据结构的出现是为了在计算机中更加科学的管理数据,选择合适的数据结构可以让我们在操作数据时 性能更加优秀,操作更为方便。
常见的数据结构
-
线性数据结构(线性表)
- 数组
- 链表
- 栈
- 队列
- …
-
非线性数据结构(非线性表)
-
树
…
-
图
-
数组组成
定义数组:
数组元素数据类型[] 数组名 = new 数组元素数据类型[数组容量];
数组元素数据类型[] 数组名 = {元素值1, 元素值2, ....};
// 前期了解就好
数组元素数据类型[] 数组名 = new 数组元素数据类型[]{元素值1, 元素值2, ....};
数组动态赋值
// 键盘录入
Scanner input = new Scanner(System.in);
int[] arr = new int[5];
// 循环录入
for (int i = 0; i < arr.length; i++) {
System.out.printf("请输入第%d个整数:", i+1);
arr[i] = input.nextInt();
}
// arr:数组名称 arr.length:数组长度
数组的遍历
-
增加数据:数组名[下标] = 元素值;
-
修改数据:数组名[下标] = 新元素值; 删除数据:
-
数组名[下标] = 数组对应元素类型的默认值;
-
循环遍历
int[] arr = new int[5]; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]) }
-
增强for遍历
int[] arr = new int[5]; for (int num : arr) { System.out.print(num) }
-
多维数组
多维数组的定义
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
数组元素的数据类型[] 数组名 = {元素值1, 元素值2, ...};
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[] {元素值1, 元素值2, ...};
// 例如:存储 3 个班各 5 名同学成绩
double[][] scores = new double[3][5];
double[][] scores = {{90, 80, 70, 60, 50}, {...}, {...}};
double[][] scores = new double[][] {{90, 80, 70, 60, 50}, {...}, {...}};
在定义二维数组时,可以省略内维数组容量相比于直接定义害内维数组容量更为灵活,内维数组可以定义不同的长度。
遍历多维数组
// 遍历
for (int i = 0; i < scores.length; i++) {
System.out.printf("第%d个班的同学成绩列表如下:\n", i+1);
for (int j = 0; j < scores[i].length; j++) {
System.out.println(scores[i][j]);
}
}
算法概述
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法 代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时 间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个 算法的优劣可以用空间复杂度与时间复杂度来衡量 。
算法就是一个程序,利用这个程序能做一些简单的事情。
排序算法
所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新 序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提 高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现 于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言 之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,不允许混淆不清。
排序算法也有很多种解决思路,常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排 序、归并排序、希尔排序、基数排序等。
冒泡排序
int[] arr = {9, 7, 8, 6, 2, 10};
// 利用冒泡排序法排序
// 外层执行次数是数组长度-1
for (int i = 0; i < arr.length - 1; i++) {
// 内层执行次数是数组长度-1-1
for (int j = 0; j < arr.length - i - 1; j++) {
// >是升序 <是降序
if (arr[j] > arr[j + 1]) {
// 利用简单交换数值的方法
int num = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = num;
}
}
}
选择排序
int[] arr = {9, 7, 8, 6, 2, 10};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[j] < arr[i]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
插入排序
int[] arr = {9, 7, 8, 6, 2, 10};
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j-1]) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
Arrays工具包
// 通过复制a数组,生成一个新的b数组
int[] b = Arrays.copyOf(a, 新数组长度);
// a数组和b数组是否相等
Arrays.equals(a, b);
// b 数组的元素为
Arrays.toString(b);
// 对b数组进行排序
Arrays.sort(b);
引用数据类型
基本数据类型
数值:
- 整数:byte、short、int、long
- 浮点数:float、double
非数值:
- char
- boolean
引用数据类型
- 数组
- 类(String是一个类,…)
- 接口
- 枚举
## 引用数据类型
**基本数据类型**
数值:
- 整数:byte、short、int、long
- 浮点数:float、double
非数值:
- char
- boolean
**引用数据类型**
- 数组
- 类(String是一个类,....)
- 接口
- 枚举