Java零基础(七)之数组排序+二维数组

  1. 排序(重点)

排序基础

//案例1:交换两个变量的值;例如:a=3,b=5 交换后:a=5,b=3
//分析:借一个变量
public class SortBasic {
    
    
	public static void main(String[] args) {
    
    
		int a = 3;
		int b = 5;
		System.out.println("交换前: a="+a+";b="+b);
		//注意:赋值操作,右边看成值,左边看成变量
		int t = a; //t=3
		    a = b; //a=5
		    b = t; //b=3
		System.out.println("交换后: a="+a+";b="+b);
	}
}

冒泡排序(重点)

冒泡排序:相邻两数两两比较,大的放右边,比较完一轮后,最右边的数为最大值;以此类推共比较(长度-1)轮
流程: 1.先画图分析 2.再写代码
在这里插入图片描述

public class MaoPao {
    
    
	public static void main(String[] args) {
    
    
		int[] a= {
    
    3,1,5,2,9,7,4,6};
		for(int i=0;i<a.length-1;i++) {
    
    //外层代表轮数
			for(int j=0;j<a.length-1-i;j++) {
    
    //内层代表每轮比较次数,依次递减
				if(a[j]>a[j+1]) {
    
    
					int t=a[j];
					a[j] = a[j+1];
					a[j+1] = t;
				}
			}
			//System.out.println("第"+(i+1)+"轮:"+Arrays.toString(a));
		}
		System.out.println("排序后:"+Arrays.toString(a));
	}
}

选择排序(重点)

在这里插入图片描述

//选择排序:假设第一个元素为最小,依次与后面元素比较;比较完一轮确定第一个位置元素是最小的;
//       假设第二个元素最小,依次与后面元素比较,以此类推;共比较(长度-1)轮
public class XuanXe {
    
    
	public static void main(String[] args) {
    
    
		
		int[] a = {
    
    3,1,5,2,9,7,6,4};
		
		for(int i=0;i<a.length-1;i++) {
    
       //外层代表轮数
			for(int j=1+i;j<a.length;j++) {
    
     //内存代表每轮比较次数
				if(a[i]>a[j]) {
    
    
					int t = a[i];
					a[i] = a[j];
					a[j] = t;
				}
			}
			//System.out.println("第"+(i+1)+"轮:"+Arrays.toString(a));
			
		}
		System.out.println("排序后:"+Arrays.toString(a));
	}
}		



插入排序(扩展)

在这里插入图片描述

系统提供的排序

//系统提供的排序方法(系统写好了具体实现,我们只需要调用即可)
public class SystemSort {
    
    
	public static void main(String[] args) {
    
    
		int[] a = {
    
    3,1,5,2,6};
		Arrays.sort(a);  //系统提供的升序排列
		System.out.println(Arrays.toString(a));
		
		//假设系统提供升序排列后,我们需要降序排列,如何做?
		//分析:收尾交换,交换长度/2次
		int len = a.length;
		for(int i=0;i<len/2;i++) {
    
    
			int t = a[i];
			a[i] = a[len-1-i];
			a[len-1-i]=t;
		}
		System.out.println("降序排列:"+Arrays.toString(a));
	}
}

一维数组练习(斐波拉契数列)

//思考: 之前使用过的斐波拉契数列,使用数组来操作:
//0  1  1  2  3   5  8  13 ... 
//规则:第一项为0,第二项为1,后面的第三项等于第一项+第二项
//分析: 将斐波拉契数列看成是数组的元素,循环遍历,并定好规则即可
public class FeiBo {
    
    
	public static void main(String[] args) {
    
    
		System.out.print("请输入项数:");
		Scanner sc = new Scanner(System.in);
		int len = sc.nextInt();  //项数,相当于数组中长度
		int[] a = new int[len];
		for(int i=0;i<len;i++) {
    
    
			if(i==0||i==1) {
    
    
				a[i]=i;  //a[0]=0;a[1]=1;
			}else {
    
    
				a[i]=a[i-1]+a[i-2];  //循环给数组元素赋值
			}
		}
		System.out.println(Arrays.toString(a));
	}
}

  1. 二维数组(掌握基本使用)
    二维数组:
    一维数组的一维数组,可以看成一维数组中的元素又是一个一维数组
    在这里插入图片描述

二维数组的赋值与取值

public class Test1 {
    
    
	public static void main(String[] args) {
    
    
		//二维数组的操作:可以看成行和列的操作,长度由行长度和列长度,下标有行下标和列下标
		int[][] a = new int[2][3];  //2是行长度  3是列长度
		//赋值
		a[0][0] = 4;  //二维数组赋值    行下标范围:0~行长度-1   列下标范围:0~列长度-1
		a[0][1] = 2;
		a[0][2] = 6;
		//a[0][3] = 7;  //列下标溢出
		a[1][0] = 8;
		//取值
		System.out.println(a[0][0]+"--"+a[0][1]+"--"+a[0][2]);
		System.out.println(a[1][0]+"--"+a[1][1]+"--"+a[1][2]);
		//System.out.println(a[2][0]); //行下标溢出
		//注意: 一般二维数组的排列,往往人为的设计成行和列的排列,方便我们操作
	}
}

二维数组的遍历

//二维数组的循环遍历
public class Test2 {
    
    
	public static void main(String[] args) {
    
    
		//二维数组的操作:可以看成行和列的操作,长度由行长度和列长度,下标有行下标和列下标
		int[][] a = new int[2][3];  //2是行长度  3是列长度
		//赋值
		a[0][0] = 4;  //二维数组赋值    行下标范围:0~行长度-1   列下标范围:0~列长度-1
		a[0][1] = 2;
		a[0][2] = 6;
		//a[0][3] = 7;  //列下标溢出
		a[1][0] = 8;
		//循环遍历
		for(int i=0;i<a.length;i++) {
    
      //a.length:行长度
			for(int j=0;j<a[i].length;j++) {
    
      //每行的列的个数
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();  //回车
		}

	}
}

二维数组的创建

//二维数组的创建:
public class Test3 {
    
    
	public static void main(String[] args) {
    
    
		//----动态赋值-----
		//1.先声明再创建空间
		int[][] a;
		a = new int[2][3];
		
		//2.声明的同时创建空间 (常用)
		int[][] b = new int[2][3];
		
		//3.创建空间的同时给定行长度
		int[][] c = new int[2][];
		c[0]=new int[]{
    
    3,5,8};
		c[1]=new int[]{
    
    1,5,7}; 
		
		//----静态赋值-----
		//4.创建空间的同时进行赋值
		int[][] d = {
    
    {
    
    1,2,5},{
    
    4,6,8}};  //二行三列的二维数组
		
		//注意:第三种和第四种可以指定不规则的列(了解),循环遍历是一样的   例如:下面静态赋值的操作: 
		int[][] e = {
    
    {
    
    1,2,5},{
    
    4,6}};
		for(int i=0;i<e.length;i++) {
    
    
			for(int j=0;j<e[i].length;j++) {
    
    
				System.out.print(e[i][j]+"\t");
			}
			System.out.println();  //回车
		}
	}
}


二维数组的练习(杨辉三角)

在这里插入图片描述

//杨辉三角
public class Test1 {
    
    
	public static void main(String[] args) {
    
    
		System.out.print("请输入杨辉三角的行:");
		Scanner sc = new Scanner(System.in);
		int row = sc.nextInt();
		int[][] a = new int[row][row];
		for(int i=0;i<row;i++) {
    
    
			for(int j=0;j<=i;j++) {
    
    
				if(j==0||j==i) {
    
     //第一列或行和列相等,则为1
					a[i][j]=1;
				}else{
    
     //当前位置值=上一行位置+上一行前一个位置
					a[i][j]=a[i-1][j]+a[i-1][j-1];  
				}
				
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();  //换行
		}
	}
}




猜你喜欢

转载自blog.csdn.net/weixin_45682261/article/details/125127451