冒泡、Arrays用法与维数组

2022-08-03,,,

小白学JAVA的第8天

  • 选择、插入排序的逻辑(复习)
    • 在一个有序数组中插入元素
    • 插入排序的逻辑:升序
    • 选择排序的逻辑:升序
  • 冒泡排序
    • 优化后的冒泡排序
  • Arrays的使用方法
  • 二维数组
    • 多数组需注意的点
    • 定义二维数组时,要定义最大维数
    • 遍历二维数组
    • 练习题

选择、插入排序的逻辑(复习)

在一个有序数组中插入元素

先扩容,新建一个比原数组多一个长度的数组
吧原数组中的数据对应赋值到新数组中
从倒数第二位开始从后向前遍历
与要插入的数依次比较:不满足原先顺序的向后移
满足原先顺序的,在该值后方插入
如果一直没有插入,则插入在首位

插入排序的逻辑:升序

外层循环从首位循环到末位-1
内层与插入的逻辑相同

选择排序的逻辑:升序

外层循环从首位向后,来控制要确定的位置
内层循环从外层循环的位置下一位开始,向后遍历
外层循环的位置和内存循环位置的值进行循环比较
内层循环比较完一轮,可以找到一个最值
将该最值与外层循环位置交换

冒泡排序

  • 如何实现冒泡排序:
    每次比较相邻两数
    小的交换到前面
    每轮结束后最大的数交换到最后

优化后的冒泡排序

public class Demo1 {
    public static void main(String[] args) {
        int[] a ={121,100,98,78,89,45,22,75,33};
        //定义循环次数
        for (int i = 0; i < a.length-1; i++) {
            boolean isSorted = true;
            for (int j = 0; j < a.length-1-i; j++) {
                if(a[j]>a[j+1]){
                    int tmp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = tmp;
                    isSorted = false;
                }
            }
            if (isSorted){
                break;
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

Arrays的使用方法

  • Arrays.sort(数组名); 对数组array的元素进行升序排列
  • copyOf(array,length); 把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
  • copyOfRange(array, fromIndex, toIndex);
  • int binarySearch(array, val); 查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)

二维数组

多数组需注意的点

  • 三维及以上的数组很少使用
  • 主要使用二维数组
  • 从语法上Java支持多维数组
  • 从内存分配原理的角度讲,只有一维数组

定义二维数组时,要定义最大维数

int [ ][ ] scores;   //定义二维数组
scores=new int[5][50];  //分配内存空间
//或者
int [ ][ ] scores = new int[5][50];

遍历二维数组

import java.util.Arrays;

/**
 * @Author Menglin Li
 * @Date 2020/7/15
 * @Description 二维数组赋值和遍历
 */
public class Demo5 {
    public static void main(String[] args) {
        int[][] a=new int[5][5];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j <a[i].length ; j++) {
                a[i][j] = (int)(Math.random()*100);
            }
        }
        System.out.println("*******************************************");

        for (int i = 0; i < a.length; i++) {
            System.out.println(Arrays.toString(a[i]));
        }
        int total = 0;
        for (int i = 0; i < a.length; i++) {
            int sum = 0;
            for (int j = 0; j < a[i].length; j++) {
                sum+=a[i][j];
            }
            total += sum;
            System.out.println((i+1)+"班的总分:"+sum);
        }
        System.out.println("全员总分:"+total);
    }
}

练习题

已知有3个班级各5名学员,输入每个学员的成绩,并使用二维数组计算各个班级的总成绩和平均分

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author Menglin Li
 * @Date 2020/7/15
 * @Description
 */
public class Test2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] a = new int[5];
        for (int i = 0; i < 5; i++) {
            System.out.println("请输入第"+(i+1)+"个学生的成绩:");
            a[i] = input.nextInt();
        }
        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 tmp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

本文地址:https://blog.csdn.net/Helltaker/article/details/107360806

《冒泡、Arrays用法与维数组.doc》

下载本文的Word格式文档,以方便收藏与打印。