欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

冒泡、Arrays用法与维数组

程序员文章站 2022-06-28 18:31:30
小白学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