学习Java第九天--数组之排序、二维数组

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);
		 
		//冒泡排序:相邻的两个数值比较大小,互换位置
		//轮次:数组长度 - 1
		//单论次数:逐级递减(数组长度-1的基础上再做逐级递减)
		
		for(int i = 0;i < nums.length - 1;i++){//外层循环:控制比较轮次(nums.length-1),比较4次
		
			for(int j = 0;j < nums.length - i - 1;j++){//内层循环:控制单轮次数(nums.length-i-1),比较4、3、2、1次
				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 数据类型[高维长度][];	//不规则数组,手动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快速排序;
  • 数组的应用:
    数组复制、数组扩容、数组参数、数组返回值、二维数组;
发布了34 篇原创文章 · 获赞 7 · 访问量 1308

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104301339