一、基本概念
- 数组(array)是一种最简单的复合数据类型,它是有序数据的集合
- 数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。
- 数组的一般形式:
- 数组在内存中的表现:
二、定义方式
三、数组遍历
① for 循环:
for(int i = 0; i < a.length; i++){
System.out.print( a[i] );
}
① for each 循环:
for( int t : a){
System.out.print(t);
}
四、三种排序
① 冒泡排序:
/**
* 冒泡排序
* @param a 需排序数组
*/
public static void bubbleSort(int[] a) {
for(int i = 0;i < a.length - 1; i++) {
boolean f = true;
for(int j = 0; j < a.length - 1; j++) {
if(a[j] > a[j + 1]) { //当前元素大于后元素时,进行交换
f = false; //代表有数据交换,继续执行
//使用临时变量temp交换(可使用异或)
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
if(f) { //f=true,元素有序,无需继续
break;
}
}
}
结果展示:
② (直接)选择排序:
/**
* 选择排序
* @param a 需排序数组
*/
public static void selectSort(int[] a) {
for (int i = 0; i < a.length; i++) {
//初始化时,假使i为最小值,通过比较更新min和pos的值
int min = a[i];
int pos = i;
for (int j = i + 1; j < a.length; j++) {
if (min > a[j]) {
min = a[j]; //记录最小值
pos = j; //记录最小值原本位置下标,便于后面交换位置
}
}
if(pos != i) { //当最小下标为i时,不交换位置
a[pos] = a[i];
a[i] = min;
}
}
}
结果展示:
③ (直接)插入排序:
/**
* 插入排序
* @param a 需排序数组
*/
public static void insertSort(int[] a) {
for(int i = 0; i < a.length; i++) {
//按子集排序,第一次排序子集中仅有下标为0,1的两个元素,每次排序都将原子集后的元素纳入新子集,以此类推,直至完成全部元素排序
int temp = a[i]; //使用临时变量temp保存原子集后的元素(待插入元素)
int j; //元素赋值使用下标
for(j = i; j > 0 && a[j - 1] > temp; j--) { //停止满足条件:1、进行至首个元素; 2、前一个元素已经小于新加入子集的元素
a[j] = a[j - 1]; //将前一个值赋予下一个位置,若不满足停止条件,则继续循环
}
a[j] = temp; //将temp保存的值(待插入元素),新加入子集的元素放在合适的位置
}
}
结果展示:
五、二维数组
-
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。
-
二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i]
-
对角矩阵:n阶方阵主对角线外都是零元素。
-
二维数组的想象图
-
二维数组是“数组的数组”:
遍历二维数组,需要使用双层for循环:
int arr[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
运行代码,则可得到下面的结果: