6.3 数组的排序
6.3.1 冒泡排序
- 相邻的两个数组比较大小,互换位置
- 记忆:外层循环:nums.length-1 内层循环:nums.length-i-1
public class TestBubble{
public static void main(String[] args){
int[] nums = {1,5,9,8,6};
printArray(nums);
for(int i = 0;i < nums.length - 1;i++){
for(int j = 0;j < nums.length - i - 1;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums [j] = nums[j+1];
nums [j+1] = temp;
}
}
}
printArray(nums);
}
public static void printArray(int[] nums){
for(int i = 0;i < nums.length;i++){
System.out.print(nums[i] +"\t");
}
System.out.println();
}
}
6.3.2 选择排序
- 固定值与其它值依次比较大小,互换位置
- 记忆:外层length-1 同时外层i作为固定值,内层的j=i+1作为其它值的起始
public class TestSelect{
public static void main(String[] args){
int[] nums = {5,7,9,1,6};
printArray(nums);
for(int i = 0; i < nums.length - 1;i++){
for(int j = i + 1 ; j < nums.length;j++){
if(nums[i] > nums[j]){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
printArray(nums);
}
public static void printArray(int[] nums){
for(int i = 0;i < nums.length;i++){
System.out.print(nums[i] +"\t");
}
System.out.println();
}
}
6.3.3 JDK排序
- java.util.Arrays.sort(数组名); //JDK提供(升序)
public class TestJDKSort{
public static void main(String[] args){
int[] nums = {4,3,5,2,1};
java.util.Arrays.sort(nums);
printArray(nums);
for(int i = 0;i < nums.length / 2;i++){
int temp = nums[i];
nums[i] = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = temp;
}
printArray(nums);
}
public static void printArray(int[] nums){
for(int i = 0;i < nums.length;i++){
System.out.print(nums[i] +"\t");
}
System.out.println();
}
}
6.4 二维数组
6.4.1 概念
- 一维数组中的一维数组;数组中的元素还是数组;
6.4.2 二维数组的赋值
public class Test2DArray{
public static void main(String[] args){
int[][] nums = new int[3][5];
nums[0][0] = 10;
nums[0][3] = 20;
nums[1][0] = 30;
nums[1][1] = 40;
nums[2][2] = 50;
nums[2][4] = 60;
}
}
- 使用双下标访问二位数组中的元素;
第一个下标代表:行号(高维下标);
第二个下标代表:列号(低维下标);
6.4.3 二维数组的内存分配
- 高维数组中的每个元素,保存了低维数组的地址,访问array[0]等价于在访问0x0000A111
6.4.4 二位数组的访问
public class Test2DArray{
public static void main(String[] args){
int[][] nums = new int[3][5];
nums[0][0] = 10;
nums[0][3] = 20;
nums[1][0] = 30;
nums[1][1] = 40;
nums[2][2] = 50;
nums[2][4] = 60;
for(int i = 0;i < nums.length;i++){
for(int j = 0;j < nums[i].length;j++){
System.out.print(nums[i][j] +"\t");
}
System.out.println();
}
}
}
- 访问低维长度:
array[0].length 首个低维数组的长度
- 访问低维数组元素:
array[0][0] 首个低维数组的首个元素
6.4.5 二维数组创建语法
数据类型[][] 数组名;
数组名 = new 数据类型[高维长度][低维长度];
数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
数据类型[][] 数组名 = new 数据类型[高维长度][];
- 声明并赋值(简):
- 数据类型[] 数组名 = {{v1,v2,v3} , {v4,v5} , {v6,v7,v8}}; //显示初始化
public class Test2DArray2{
public static void main(String[] args){
int[][] array = new int[3][];
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
array[0] = new int[5];
array[1] = new int[3];
array[2] = new int[7];
System.out.println();
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println();
System.out.println(array[0].length);
System.out.println(array[1].length);
System.out.println(array[2].length);
for(int i = 0;i < array.length;i++){
for(int j = 0;j < array[i].length;j++){
System.out.print(array[i][j] +"\t");
}
System.out.println();
}
System.out.println();
int[][] numbers = { {1,2,3} , {4,5,6,7} , {8,9} };
for(int i = 0;i < numbers.length;i++){
for(int j = 0;j < numbers[i].length;j++){
System.out.print(numbers[i][j] +"\t");
}
System.out.println();
}
}
}
6.6 总结
- 数组的概念:
一组连续的存储空间,存储多个相同数据类型的值;
- 数组的声明与赋值:
数据类型[] 数组名 = new 数据类型[长度];
数组名[下标] = 值;
- 数组的遍历:
从头至尾,逐一对数组的每个元素进行访问;
- 数组的排序:
冒泡排序、选择排序、JDK快速排序;
- 数组的应用:
数组复制、数组扩容、数组参数、数组返回值、二维数组;