首页 > 编程语言 >【Java】从头开始的Java复健day8

【Java】从头开始的Java复健day8

时间:2023-08-16 18:24:21浏览次数:46  
标签:复健 arr Java day8 int 元素 System out

用的书:《Java从入门到精通》

day1(3.1-3.3): 【Java】从头开始的Java复健day1

day2(3.4-3.8): 【Java】从头开始的Java复健day2

day3(4.1-4.4): 【Java】从头开始的Java复健day3

day4(4.5-5.2): 【Java】从头开始的Java复健day4

day5(5.3-5.4): 【Java】从头开始的Java复健day5

day6(5.5-5.9): 【Java】从头开始的Java复健day6

day7(6.1-6.4): 【Java】从头开始的Java复健day7

第六章 数组

6.5 数组排序算法

冒泡排序

最常用的数组排序算法之一 总是把小数往前放 大数往后放 像水中冒泡一样故得此名

  • 基本思想

    对比相邻元素值 如果满足条件就交换元素值

    把较小的元素移动到数组前边 大的元素移动到数组后边

    看图就很清楚了

    冒泡排序

    图源:菜鸟教程

    在第一轮结束之后最大的那个就已经垫底了 在第二轮的时候只用比较到倒数第二个就行了

    因为是两两比较 所以轮次是长度减一 eg 三个数字的情况下两两比较只要2轮就可以了

  • 算法示例

    冒泡算法由双层循环实现

    • 外层用于控制排序轮数 一般要为数组长度-1 因为最后一次循环只剩下一个数组元素 不需要对比

    • 内层主要用于对比数组中每个邻近元素的大小 以确定是否交换位置

  • 算法实现

直接选择排序

比冒泡排序稍微快些

  • 基本思想

    将指定排序位置与其他数组元素分别对比 如果满足条件就交换元素值

    与冒泡排序的区别

    不是交换相邻元素 而是交换指定的排序位置的元素

  • 算法示例

    每一轮次从中选出最小(或最大)的一个元素放在最后

  • 算法实现

反转排序

就是把数组倒序

  • 基本思想

    最后一个元素和第一个元素替换 倒数第二和第二个替换 ……

  • 算法实现

public class Java6_5 {
    public static void main(String[] args) {
        int[] arr = {4, 7, 2, 6, 2, 6, 1, 4};
        //bubbleSort(arr);
        Java6_5 sorter = new Java6_5();
        // sorter.bubbleSort(arr);
        // sorter.selectSort(arr);
        sorter.reverseSort(arr);
        sorter.showArr(arr);
    }

    // 这里给出了两套方法
    // 一套是被注释掉的使用静态函数然后main函数中直接调用
    // 另一套是创建类的实例之后访问成员函数
    // 如果不需要访问实例变量 如辅助函数 工具函数 则静态方法比较好
    // 如果需要需要访问对象状态和成员变量则使用创建实例的方法
    // public static void bubbleSort(int[] arr){
    public void bubbleSort(int[] arr){
        // 外层控制排序轮数
        for (int i=0; i < arr.length - 1; i++){
            // 内层对比数组中每个邻近元素的大小
            for (int j=0; j < arr.length-(i+1); j++){
                // 比较相邻元素大小 若左大于右则交换位置
                if (arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        /*
        这部分太常用了 拿出来写成一个函数
        for (int i : arr){
            System.out.print(i + " ");
        }
        */
    }

    public void selectSort(int[] arr) {
        int index;
        // 外层控制排序轮数
        for (int i = 1; i < arr.length; i++){
            // 每轮开始之前都要重置一下位置
            index = 0;
            // 因为index初始=0 故从arr[1]开始比较
            for (int j=1; j <= arr.length-i; j++){
                // 当前最大值的索引
                if (arr[j] > arr[index]){
                    index = j;
                }
            }
            // 交换最大值和最后一个未排序的元素的位置
            int temp = arr[arr.length-i];
            arr[arr.length-i] = arr[index];
            arr[index] = temp;
        }
    }

    public void reverseSort(int[] arr){
        int temp;
        for (int i=0; i<arr.length / 2; i++){
            temp = arr[i];
            arr[i] = arr[arr.length-(i+1)];
            arr[arr.length-(i+1)] = temp;
        }
    }

    public void showArr(int[] arr){
        for (int i : arr){
            System.out.print(i + " ");
        }
    }
}

6.6 小结 略

6.7 测试

import java.util.Arrays;

public class Java_Test6_7 {
    public static void main(String[] args) {
        System.out.println("创建数组arr1和arr2 将arr1中索引位置是0~3的元素复制到arr2中");
        int[] arr1 = {1, 2, 6, 7, 5};
        int[] arr2;
        // 注意这里的终点索引应该是 4,不包含终点元素本身
        arr2 = Arrays.copyOfRange(arr1, 0, 4);
        showArr(arr1);
        showArr(arr2);
        System.out.println("将数组中最小的数输出");
        int min = arr1[0];
        for (int i : arr1){
            if (i < min){
                min = i;
            }
        }
        System.out.println(min);
        System.out.println("将arr中索引位置是2的元素替换为'bb'");
        String[] arr = {"hello", ",", " ", "world", "!"};
        for (String i : arr){
            System.out.print(i + " ");
        }
        System.out.println("");
        arr[2] = "bb";
        for (String i : arr){
            System.out.print(i + " ");
        }
        System.out.println("");
        System.out.println("将二维数组的行列互调显示出来 类似于转置矩阵");
        int[][] arr3 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int[][] arr4 = new int[3][3];
        for (int i=0; i < arr3.length; i++){
            for (int j=0; j < arr3[i].length; j++){
                arr4[i][j] = arr3[j][i];
                System.out.print(arr4[i][j]);
            }
            System.out.println();
        }

    }

    public static void showArr(int[] arr){
        for (int i : arr){
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

标签:复健,arr,Java,day8,int,元素,System,out
From: https://www.cnblogs.com/ryukirin/p/17635884.html

相关文章

  • 学习笔记 - Java 面向对象_上
    学习面向对象内容的三条主线Java类及类的成员:属性、方法、构造器;代码块、内部类面向对象的特征:封装、继承、多态、(抽象)其他关键字的使用:this、super、package、import、static、final、interface等类的相关概念类和对象概述类(Class)和对象(Object)是面向对象的核心概念。......
  • java List removeAll 慢
     之前 odmComponentPlatformListCopy.removeAll(componentPlatformListCopy); 由于2个list都有100多万非常慢 几个小时 改为 odmComponentPlatformListCopy.removeAll(newHashSet<>(componentPlatformListCopy)); 几秒钟就完成了,list的泛型对象需要实现hashco......
  • JavaScript面试题2
    JavaScript21.下面代码的输出是什么?functionsayHi0{ console.log(name);        console.log(age);        varname="Lydia";        letage=21;       }//打印出来:undefined和......
  • javascript学习笔记day2
    今天在b站跟学了黑马的前端js课程,因为是第一天学习都对于我们这种学过了的来说其实挺简单的,不过今天一边做公司的项目一边学习多少是有点时间不够的感觉,看样子明天要开二倍看了,下面是今天的笔记什么是js:javascript是人机交互的一种编程语言js由哪几部分组成:ECMAScript和webapis......
  • arthas-Java进程监控
    什么是Arthas?  Arthas是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率  官方文档:https://arthas.......
  • Java面试题:String类的常用方法都有哪些?
    Java面试题:String类的常用方法都有哪些?publicclassTest03{/*String类常用方法*/publicstaticvoidmain(String[]args){Stringstr1="Abcdefg123";//常见String类的获取功能System.out.println(str1.length());//计算St......
  • Java中List排序的4种方法
    在开发ERP或电商系统中,经常会遇到内容加密,生成签名,展示页面列表等功能场景,这个时候我们需要在Java程序中对List集合进行排序操作。排序的常见方法有以下4种:使用Comparable进行排序;使用Comparator进行排序;JDK8以上的环境,可以使用Stream流进行排排序;JD......
  • Java如何检查文件是目录还是文件?
    开发过程中经常会遇到读取文件内容的情况,需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况。我们可以通过java.io.File类包找出文件是目录还是常规文件。java.io.File类包含两种方法,它们分别是:• isFile():如果文件存在并且是常规文件,则此方法返回true;如......
  • JavaScript实现大文件上传
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button......
  • springmvc 开启异步请求报错 Java code using the Servlet API or by adding "true"
    报错内容:java.lang.IllegalStateException:Asyncsupportmustbeenabledonaservletandforallfiltersinvolvedinasyncrequestprocessing.ThisisdoneinJavacodeusingtheServletAPIorbyadding"true"toservletandfilterdeclarationsin......