服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 从Java角度看冒泡排序和多维数组

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

2021-10-14 21:16Java进阶学习交流Java进阶者 Java教程

本文介绍了数组冒泡排序、多维数组、二维数组的动态和静态初始化。详细介绍了常用的一种冒泡排序算法,通过案例分析冒泡排序的过程。详细介绍了定义二维数组的动态和静态初始化的格式。

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

一、数组冒泡排序

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

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

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

3.冒泡排序的案例

例如:

  1. public static void main(String[] args) { 
  2. // TODO Auto-generated method stub 
  3. int[] arr = {26, 43, 11, 37, 8}; 
  4. System.out.println("冒泡排序前:"); 
  5. print(arr);                         //打印冒泡排序前 
  6. System.out.println("冒泡排序后:"); 
  7.     bubbleSort(arr);                    //调用冒泡排序方法 
  8. print(arr);                         //打印冒泡排序后 
  9. //定义冒泡排序方法 
  10. public static void bubbleSort(int[] arr) { 
  11. //定义外层循环,外循环只需要比较arr.length-1次就可以了 
  12.     for (int i = 0; i < arr.length - 1; i++) {       
  13.         //定义内层循环 
  14.         for (int j = 0; j < arr.length - 1 - i; j++) {      //-1为了防止索引越界,-i为了提高效率 
  15.             if(arr[j] > arr[j+1]) {             //比较相邻元素 
  16.                 //下面的代码表示用交换两个数 
  17.                 int temp = arr[j];               
  18.                 arr[j] = arr[j + 1]; 
  19.                 arr[j+1] = temp
  20.             } 
  21.         } 
  22.         System.out.print("第"+(i+1)+"轮排序后"); 
  23.         print(arr);//每轮比较结束后打印数组 
  24. //定义打印数组方法 
  25. public static void print(int[] arr) { 
  26. //遍历数组 
  27. for (int i = 0; i < arr.length; i++) { 
  28.         System.out.print(arr[i] + " "); 
  29. System.out.print("\n"); 

输出的结果是:

  1. 冒泡排序前: 
  2. 26 43 11 37 8  
  3. 冒泡排序后: 
  4. 第1轮排序后26 11 37 8 43  
  5. 第2轮排序后11 26 8 37 43  
  6. 第3轮排序后11 8 26 37 43  
  7. 第4轮排序后8 11 26 37 43  
  8. 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.第一种方式

  1. int[ ][ ] a = new int[2][3]; 

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

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

2.第二种方式

int[ ][ ] a = new int[3][ ];

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

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

四、二维数组静态初始化

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

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

  1. 类型[][] 数组名 = new 类型[][]{值1, 值2, ……,}; 

  1. 类型[][] 数组名 = {{值11, 值12, …… },  
  2.                  {值21, 值22, ……} 
  3.                     …… 
  4.                  }; 

例如:

  1. int[][] a = new int[][]{{5, 2}, {3, 1, 2}, {6}}; 
  2.  int[][] a = {{1, 2, 3}, {4, 5, 6}, {3, 2, 1}}; 

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

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

例如:

  1. public static void main(String[] args) { 
  2. // TODO Auto-generated method stub 
  3. int b[][]={{11},{21,22},{31,32,33,34}};//定义二维数组 
  4. int sum=0;//保存数组所有元素的和值 
  5. System.out.println("数组b的行数:" + b.length); 
  6. //遍历数组 
  7. for(int i=0;i<b.length;i++){ 
  8.         System.out.println("b["+i+"]行的数值个数:" + b[i].length); 
  9.         for(int j=0;j<b[i].length;j++){ 
  10.             sum +=b[i][j]; 
  11.         } 
  12. System.out.println("数组所有元素的和:" + sum); 
  13.  

输出的结果是:

  1. 数组b的行数:3 
  2. b[0]行的数值个数:1 
  3. b[1]行的数值个数:2 
  4. b[2]行的数值个数:4 
  5. 数组所有元素的和:184 

六、总结 

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

原文链接:https://mp.weixin.qq.com/s/W51zGzG9GQGciLhl83_56w

延伸 · 阅读

精彩推荐
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7472021-02-04