排序与二维数组

1、排序****

============排序基础==========

交换两个变量的值

int a = 3;
int b = 5;
System.out.println("交换前:a="+a+" b="+b);
int temp = a;
a=b;
b=temp;
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));
	}
}

2. 二维数组(掌握基本使用)
//二维数组:
//一维数组的一维数组,可以看成一维数组中的元素又是一个一维数组

 ======================二维数组的赋值与取值======================

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();  //换行
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值