首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从Java角度看冒泡排序和多维数组

从Java角度看冒泡排序和多维数组

作者头像
Java进阶者
发布2021-01-22 10:40:20
发布2021-01-22 10:40:20
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)手把手教你用Java打造一款简单故事书(下篇)手把手教你用Java打造一款简单考试系统(上篇)手把手教你用Java打造一款简单考试系统(下篇)手把手带你用Java打造一款对对碰游戏(上篇)手把手带你用Java打造一款对对碰游戏(下篇)手把手带你用Java实现点灯游戏(上篇)手把手带你用Java实现点灯游戏(下篇),接下来的几篇文章是关于Java基础的,希望对大家的学习有帮助,欢迎大家在讨论区留言。

一、数组冒泡排序

1.在冒泡排序过程中,不断地比较数组中相邻的两个元素,将小数放在前面,大数放在后面。

2.具体分析冒泡排序的整个过程

首先是从第一个数值开始,将相邻的两个数值依次进行比较,直到最后的两个数值完成比较。将前一个数值比后一个数值大,则它们就交换位置。数组中的最后一个元素就是最大的数值。然后除了最大的数值,将剩余的数值继续两两比较,前一个数值比后一个数值大,则它们就交换位置。一直比较到倒数的第二个数值,因为倒数最后一个数值是最大的。依此类推,重复以上的过程,直到最终完成这个排序。

3.冒泡排序的案例

例如:

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {26, 43, 11, 37, 8};
System.out.println("冒泡排序前:");
print(arr);                         //打印冒泡排序前
System.out.println("冒泡排序后:");
    bubbleSort(arr);                    //调用冒泡排序方法
print(arr);                         //打印冒泡排序后
}
//定义冒泡排序方法
public static void bubbleSort(int[] arr) {
//定义外层循环,外循环只需要比较arr.length-1次就可以了
    for (int i = 0; i < arr.length - 1; i++) {      
        //定义内层循环
        for (int j = 0; j < arr.length - 1 - i; j++) {      //-1为了防止索引越界,-i为了提高效率
            if(arr[j] > arr[j+1]) {             //比较相邻元素
                //下面的代码表示用交换两个数
                int temp = arr[j];              
                arr[j] = arr[j + 1];
                arr[j+1] = temp;
            }
        }
        System.out.print("第"+(i+1)+"轮排序后");
        print(arr);//每轮比较结束后打印数组
}
}
//定义打印数组方法
public static void print(int[] arr) {
//遍历数组
for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
}
System.out.print("\n");
}

输出的结果是:

代码语言:javascript
代码运行次数:0
运行
复制
冒泡排序前:
26 43 11 37 8 
冒泡排序后:
第1轮排序后26 11 37 8 43 
第2轮排序后11 26 8 37 43 
第3轮排序后11 8 26 37 43 
第4轮排序后8 11 26 37 43 
8 11 26 37 43

我们来分析上面这个案例,定义了一个数组,数组的值是26、43、11、37、8。定义了一个冒泡排序的方法,通过两层循环比较相邻的两个数,我们看下这个排序是如何进行的。首先第1轮排序是26和43、43和11、11和37、37和8比较4次,把最大值放在最后,所以第1轮排序后的结果是26、11、37、8、43。第2轮排序是26和11、11和37、37和8比较3次,把最大值放在倒数第二位。第2轮排序得到的结果是11、26、8、37、43。第3轮排序是11和26、26和8比较,第4轮排序是11和8比较,最终的结果是8、11、26、37、43。

二、什么是多维数组

用一个数组来保存某个班级学生的成绩,如果要统计一个学校各个班级学生的成绩。我们就需要用到多维数组。多维数组简单说是数组的嵌套。

三、二维数组动态初始化

(一)二维数组动态初始化是由系统自动给元素赋初始值。

(二)二维动态初始化方式

1.第一种方式

代码语言:javascript
代码运行次数:0
运行
复制
int[ ][ ] a = new int[2][3];

上面代码相当于定义了一个2x3的二维数组,二维数组长度为2,二维数组中的每个元素又是一个长度为3的数组。

2.第二种方式

代码语言:javascript
代码运行次数:0
运行
复制
int[ ][ ] a = new int[3][ ];

二维数组第二种方式和第一种类似的,只是数组中每个元素长度不确定。

四、二维数组静态初始化

(一)二维数组静态初始化是为二位数组的每个元素赋值。

(二)二维数组静态初始化方式

代码语言:javascript
代码运行次数:0
运行
复制
类型[][] 数组名 = new 类型[][]{值1, 值2, ……,};

代码语言:javascript
代码运行次数:0
运行
复制
类型[][] 数组名 = {{值11, 值12, …… }, 
                 {值21, 值22, ……}
                    ……
                 };

例如:

代码语言:javascript
代码运行次数:0
运行
复制
int[][] a = new int[][]{{5, 2}, {3, 1, 2}, {6}};
 int[][] a = {{1, 2, 3}, {4, 5, 6}, {3, 2, 1}};

五、定义一个不规则的二维整型数组,输出其行数和每行的元素个数,并求数组所有元素的和。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[][]={{11},{21,22},{31,32,33,34}};//定义二维数组
int sum=0;//保存数组所有元素的和值
System.out.println("数组b的行数:" + b.length);
//遍历数组
for(int i=0;i<b.length;i++){
        System.out.println("b["+i+"]行的数值个数:" + b[i].length);
        for(int j=0;j<b[i].length;j++){
            sum +=b[i][j];
        }
}
System.out.println("数组所有元素的和:" + sum);

}

输出的结果是:

代码语言:javascript
代码运行次数:0
运行
复制
数组b的行数:3
b[0]行的数值个数:1
b[1]行的数值个数:2
b[2]行的数值个数:4
数组所有元素的和:184

六、总结

本文介绍了数组冒泡排序、多维数组、二维数组的动态和静态初始化。详细介绍了常用的一种冒泡排序算法,通过案例分析冒泡排序的过程。详细介绍了定义二维数组的动态和静态初始化的格式。定义一个不规则的二维整型数组,输出行数和每行的元素的个数,帮助大家的理解。希望通过本文的学习,对你有所帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java进阶学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数组冒泡排序
  • 二、什么是多维数组
  • 三、二维数组动态初始化
  • 四、二维数组静态初始化
  • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档