0
点赞
收藏
分享

微信扫一扫

冒泡排序和二维数组

Hyggelook 2022-02-17 阅读 73

二维数组

  • 多维数组在平常很少使用,二维数组已经可以满足日常开发使用
  • 以二维数组为例,简单介绍多维数组

先上代码:

package com.yuqu.www.arrays;

public class Demo09 { //多维数组:以二维数组为例
    public static void main(String[] args) {
        /**
         * 二维数组:定义一个数组,数组中的每个元素均为一个数组  
         * 以arr数组为例:  此处定义了一个二维数组arr[],其中有四个元素,即有四个数组arr[0]arr[1]arr[2]arr[3]
         * 理解:此时arr[0]arr[1]arr[2]arr[3]各自为一个数组,但对于arr[]来说,都属于arr[]数组当中的元素
         * 此处我们将称为arr[0]arr[1]arr[2]arr[3]二维组,每个二维组当中有两个元素。
         * 而多维数组的含义即可解释为:
         * inr[][][]  arrs = new int
         * 当我们需要索引每个二维组当中的元素时,分别表示为(此处以arr[0]示例):
         * arr[0][0] = 1;    arr[0][1] = 2;
         * [4][2]
         * 1,2   arr[0]
         * 2,3   arr[1]
         * 3,4   arr[2]
         * 4,5   arr[3]
         * arr.length =  4  ,即arr[]数组中包含了四个元素,每个元素均为一个数组
         */
        //定义一个3*4的数组
       int[][] arrs = new int[3][4];//此时定义动态初始化二维数组
        arrs[0][0] = 99;
        arrs[0][1] = 98;
        arrs[0][2] = 97;
        arrs[0][3] = 96;
        /**
         *  定义三个二维组,每个数组四个元素即三行四列
         *  行的个数即为二维组个数,列的个数即为每个二维组中元素的个数
         *  每个二维组四个元素
         *  即arrs[0]arrs[1]arrs[2]三个数组
         *  数组元素为arrs[0][0]arrs[0][1]arrs[0][2]arrs[0][3]
         */
        arrs[1][0] = 1;
        int[][] arr = {{1,2},{2,3},{3,4},{4,5}};//此时定义静态初始化二维数组
        System.out.println(arr[0]);//打印arr[0]的地址名  arr[0][0]即是索引arr[0]数组中的第一个元素
        printarr(arr);
    }
    public static int[][] printarr(int[][] arrays){
        for (int i = 0; i < arrays.length; i++) {//打印四个二维组
            for (int j = 0; j < arrays[i].length; j++) {//打印各个二维组当中的元素
                System.out.print(arrays[i][j]);
            }
            System.out.print("  ");
        }
        return arrays;
    }
}

理解如:

image-20220216231242110

  • 如上图所示,创建了一个三行两列的二维数组
  • 其中包含三个二维组,每个二维组当中含有两个元素
  • 而往后的三维、四维数组不需要深究,了解即可
  • 以三维数组为例:
  • 可以简单理解为在一个二维数组中继续嵌套数组,得到的便是三维组
  • 此时的三维组便是作为一个二维组的元素存在,二维组则作为整个数组的元素

如下:

public static void main(String[] args) {//了解三维数组
        int[][][] arr = new int[2][2][2];//动态初始化三维数组
        /**
         * 与二维数组理解一样,首先定义了数组arr[],此时arr[0]arr[1]作为arr[]数组的元素
         * arr[0]arr[1]是两个数组,我们称作二维组,同时也作为arr[]的元素存在
         * arr[0][0]arr[0][1]是两个数组,称三维组,同时作为arr[0]的元素存在
         */
        int[][][] arr2 = {{{10,20,30,40}},{{1,2,3,4,5}}};// 静态初始化三维数组
        /**等同于       int[][][] arr2 = new int[1][0][元素]
         * 此时索引:我们来索引arr[1][0]数组中的最后一个元素   5
         * arr2[1][0][4]
         */
        System.out.println(arr2[1][0][4]);//   5
    }

理解如:

bc79a46d14ed3aa66ed885689c6b64c

冒泡排序

  • 比较一个数组中,两个相邻的元素,若甲>乙则互换位置
  • 每次比较都会产生一个最大或最小的数字
  • 下一轮可以少一次排序:每过一轮排序都会有一个最大或最小的数字下沉到底,则在下一轮该数据可以不参与比较
  • 最后一个元素不参与比较,在前面所有元素比较过程中,最后的元素将也会随着循环结束而交换至对应位置
public static void main(String[] args) {
        int[] arr = {2, 6, 23, 5, 12};
        arr(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static int[] arr(int[] Arrays) {//冒泡排序
        int str = 0;
        int i;
        //外层循环,决定循环几轮   循环i轮
        for (i = 0; i < Arrays.length-1; i++) {
            boolean _1 = false;//避免无意义的比较
            //内层循环,j = 每轮比较的次数   
            //一轮下沉一个数,少比一个数
            for (int j = 0; j < Arrays.length-1-i; j++) {
                //j<Arrays.length-1-i:每过一轮则会有一个数据下沉到底,该数据则不需要再次比较,所以每次-i
                //j<Arrays.length-1:将会把已经下沉的数据仍参与比较,虽然结果正确,但出现了不必要的比较
                //每次比较都会比较到j的极限从而停止比较
                if (Arrays[j]>Arrays[j+1]){//升序
                    //交换位置
                    str = Arrays[j];
                    Arrays[j] = Arrays[j+1];
                    Arrays[j+1] = str;
                    _1 = true;
                }
            }
            if (_1 == false){
                break;
            }
        }
        System.out.println(i);//循环i轮
        return Arrays;
    }

Arrays类了解*

  • Arrays数组工具类Java.util.Arrays
  • API中提供了一个工具类可以对数据类型进行一些基本操作
  • 注意查看JDK帮助文档
  • Arrays类中的方法均为static修饰的静态方法,使用时可直接调用
  • 常见具有以下功能:
方法作用
fill方法给数组赋值
sort方法给数组内元素进行排序
equals方法比较数组中元素值是否相等
binarySearch方法对排序好的数组进行二分法查找数组元素
toString返回指定数组的内容的字符串表示形式
举报

相关推荐

0 条评论