//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));
}
}
//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(); //换行
}
}
}
Java程序猿必学第六篇——排序与二维数组
猜你喜欢
转载自blog.csdn.net/m0_62718093/article/details/120830709
今日推荐
周排行