Java数组(冒泡排序,选择排序)

目录

一、Java数组性质

二、数组的使用

1.数组的声明(两种方式)

2.初始化

3.访问数组元素

4.数组的遍历

三、冒泡排序&选择排序

1.冒泡排序

2.选择排序

四、二维数组

1.二维数组的声明

2.初始化

3.二维数组的遍历

4.二维数组的应用(杨辉三角)


一、Java数组性质

   ·数组是一组有相同数据类型的元素的集合。

   ·创建数组时必须指定数组长度,不可改变

   ·创建数组对象是在内存中开辟一块连续的空间

   ·数组本身是引用数据类型,但数组中的元素可以是任何数据类型。

二、数组的使用

1.数组的声明(两种方式)

(1)int [ ]  a; 一般情况下我们建议使用这种声明方式。

(2)int  a [ ];

注意:声明数组时不能指定长度。如:int[3] a;是错误的。

2.初始化

(1)指定数组容量,初始化为默认值。

int[] arr = new int [5];

(2)初始化手动赋值,容量为元素个数。

int[] arr = new int []{1,2,3,4,5};//长度为5
//或者
int[] arr = {1,2,3,4,5};

(3)动态初始化,定数组容量和赋值分开操作

int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

3.访问数组元素

访问格式:数组名[下标];  例如:arr[0];

注意:下标从0开始,最大为 数组长度-1

4.数组的遍历

(1)for循环遍历

int[] arr = new int []{1,2,3,4,5};
        for (int i = 0; i < arr.length; i++) {//数组长度为:arr.length
            System.out.println(arr[i]);
        }

其中,求数组长度的方法为:数组名.length。例如:arr.length。

(2)增强for循环

格式为:

int [ ]  arr = new int [ ]{1,2,3,4};

             for(数组元素的类型  临时变量名字 :数组的名字){

                  System.out.println(临时变量名字 );

             }

int[] arr1 = new int[]{1,2,3,4};
        for (int x:arr1){
            System.out.println(x);
        }

三、冒泡排序&选择排序

1.冒泡排序

冒泡排序:从数组每次取两个相邻的数进行比较,将最大值移到最后,最后得到一个从小到大的数组。

算法实现:

int[] arr = {5,4,3,2,1};
        for(int i = 0;i<arr.length-1;i++){//一共比较几趟
            for(int j = 0;j<arr.length-1-i;j++){//一趟比较几次
                if(arr[j]>arr[j+1]){
                    int max = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = max;
                }
            }
        }
        for(int k = 0;k<arr.length;k++) {//打印排序后数组
            System.out.println(arr[k]);
        }

这里其实可以简化打印函数,如下所示。运用Java语言提供的Arrays.toString()方法,将数组转化为String类型输出,可以更方便的输出数组。

System.out.println(Arrays.toString(arr));

2.选择排序

选择排序: 从第一个元素开始,与之后每一个元素比较,把较小的移到第一个位置,循环操作

5,4,3,2,1

3,5,4,2,1

......

代码实现:

 int a[] = {5,4,3,2,1};
        for (int i=0;i<a.length-1;i++){//一共比较几趟
            int min = i;               //初始化变量记录最小数位置
            for (int j=i+1;j<a.length;j++){
                if (a[min]>a[j]){      //得到较小值
                    min=j;             //将较小值位置存到min
                }
            }
 int num = a[i];//交换
       a[i]=a[min];
       a[min]=num;
}
System.out.println(Arrays.toString(a));

四、二维数组

1.二维数组的声明

二维数组是数组的数组,二维数组的每个元素是一维数组。

(1)int [ ][ ]  a;     这里我们同样建议使用这种声明方式。

(2)int  a[ ][ ];

2.初始化

例如:

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

[3]:二维数组的长度为3。

[5]:二维数组中,每个一维数组的长度为5。

二维数组初始化定义容量大小时,可以不定义二维数组中的一维数组的长度,不能不定义二维数组的长度。

//正确初始化:
            int[][] a=new int[2][3];

            int[][] a=new int[2][];//这里相当于二维数组的每个元素为空,即{null,null}
            //我们可以手动为其中的一维数组创建容量大小。
                    a[0]=new int[8];
                    a[1]=new int[5];

//错误初始化:
            int[][] a=new int[][3];

3.二维数组的遍历

我们可以把二维数组想象成一个i*j的表格,通过嵌套循环进行层次遍历。

 int[][] a=new int[2][3];
 int[][] b={{1,2,3},{4,5,6}};//初始化赋值
 int[][] c=new int[][]{{1,2,3},{4,5,6}};
 for (int i=0;i<b.length;i++){//二维数组遍历
     for (int j=0;j<b[i].length;j++){//二维数组中的一维数组遍历
          System.out.print(b[i][j]+"\t");
     }
     System.out.println();//换行
}

4.二维数组的应用(杨辉三角)

如图所示的杨辉三角满足以下定义:

1.每行端点与结尾的数为1。

2.每个数等于它左上和右上方两数之和。

3.第n行的数字有n项。

4.每行数字左右对称,由1开始逐渐变大。

那我们如何用计算机语言实现如图10行杨辉三角的打印呢?

我们可以把它看作是二维数组的模样,空的地方可以看做是0。

以图中的10行杨辉三角为例:

1.初始化操作 

由最后一行,我们可以轻易得出每一行有2*行数+1个数。因此我们初始化二维数组大小为:

int row = 10;//row为行数
        int[][] a=new int[row][row*2+1];

2.遍历二维数组,完成杨辉三角中数值的计算

第一行只有最中间是1,其余位置都为0,因此二维数组从第二行开始遍历,一次取一个一维数组

这里我们要注意:遍历一维数组时,不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,因为找不到右上角的数来相加。

 a[0][row] = 1;//二维数组已经初始化默认为0,第一行只有中间一个元素要赋值为1
        for (int i = 1; i < a.length; i++) {//二维数组从第二行开始遍历,一次取一个一维数组
            for (int j = 1; j < a[i].length-1; j++) {//一维数组不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,找不到右上角的数来相加
                a[i][j]=a[i-1][j-1]+a[i-1][j+1];
            }
        }

3.打印杨辉三角

for (int i = 0; i < a.length; i++) {//打印
            for (int j = 0; j < a[i].length; j++) {
                if(a[i][j]!=0){
                    System.out.print(a[i][j]+"\t");
                }
                else {
                    System.out.print(" \t");
                }
            }
            System.out.println();//换行
        }

完整代码:

public static void main(String[] args) {
        int row = 10;//row为行数
        int[][] a=new int[row][row*2+1];
        a[0][row] = 1;//第一个二维数组和一维数组已经初始化
        for (int i = 1; i < a.length; i++) {//二维数组从第二行开始遍历,一次取一个一维数组
            for (int j = 1; j < a[i].length-1; j++) {//一维数组不能从第一个开始算,因为第一个数找不到他左上角数来相加;也不能到最后一个结束,找不到右上角的数来相加
                a[i][j]=a[i-1][j-1]+a[i-1][j+1];
            }
        }
        for (int i = 0; i < a.length; i++) {//打印
            for (int j = 0; j < a[i].length; j++) {
                if(a[i][j]!=0){
                    System.out.print(a[i][j]+"\t");
                }
                else {
                    System.out.print(" \t");
                }
            }
            System.out.println();//换行
        }
    }

以上是有关Java数组的内容分享,希望本篇文章能在您的学习生活中有所帮助。如有不正,恳请及时指出,让我们共同学习,共同进步!

  • 50
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值