首页 > 其他分享 >第6章 数组、排序和查找

第6章 数组、排序和查找

时间:2022-08-19 15:59:06浏览次数:61  
标签:arr int ++ length 查找 数组 排序 public

6.1  为什么需要数组 Array

         数组可以存放多个同一类型的数据,数组的数据类型是引用类型。

6.2  数组的使用

        ​​​​​​​1)使用方式1:动态初始化

        定义:数据类型 数组名[] = new 数据类型[大小]     int arr[] = new[3];//创建数组,名为arr,存放3个int

        数组的引用(使用/访问/获取数组元素)

        数组名[下标/索引/index],使用arr数组的第三个数 arr[2],下标从0开始

        2)使用方式2:动态初始化

        先声明数组:数据类型 数组名[] 或 数据类型[] 数组名   int a[]; int[] a;

        创建数组:数组名 = new 数据类型[大小]   a = new int[5];

        3)使用方式3:静态初始化

        数据类型 数组名[] = {元素值,元素值……}  int[] a = {1,2,3,4};

6.3  数组使用注意事项和细节

         1)数组是多个相同类型数据的组合,实现对这些数据的统一管理

        2)元素可以是任何数据类型,但不能混用

        3)数组创建后,若没赋值,则默认 int/short/byte/long/ 0;float/double 0.0;chaf \u0000 boolean false;String null

        4)使用步骤:声明数组并开辟空间-->给数组各个元素赋值-->使用

        5)数组下标从0开始,且必须在指定范围内使用,否则报:下标越界异常

        6)数组属引用类型,数组型数据是对象(object)

6.4  应用案例

//创建一个char类型的26个元素的数组,分别放置 A-Z。for循环访问所有元素并打印
public class Exercise {
    public static void main(String[] args){
        char[] arr = new char[26];
        arr[i] = (char)('A' + i);
      
        for(int I = 0; I < arr.length; I++){
            
            System.out.println(arr[i]);
        }
    }
}

6.5  数组赋值机制

        数组在默认情况下是引用传递,赋的值是地址,值会变化

6.6  数组拷贝

        数组arr1 拷贝到 arr2 ,arr2的变化不会影响arr1(创建arr2,遍历arr1,将arr1的值赋给arr2)

6.7  数组反转

        方式1 :找规律--前后交换

public class Exercise{
    public static void main(String[] args){
        int arr = {1,2,3,4};
        int temp = 0;
        for(int I = 0; I < a.length/2; I++){
            temp = arr[i];
            arr[i] = arr[arr.length-1-i];
            arr[a.length-1-i] = temp;
            
        }
        for(int I = 0; I < arr.length; I++){
            System.our.println(arr[i]);
        }
        
    }
}

        方式2 :逆序赋值法--创建新数组逆序赋值

public class Exercise{
    public static void main(String[] args){
        int[] arr = {1,2,3,4};
        int[] arr2 = new int[4];
        for(int I = arr.length - 1, j = 0; I >= 0; I--, j++){
            arr2[j] = arr[i];
        }
        arr = arr2;
        for(int I = 0; I < arr.length; I++){
            System.out.println(arr[i]);
        }
        
    }
}

6.8  数组添加/扩容

        实现动态的给数组添加元素效果,实现对数组的扩容

import java.util.Scanner;
public class Exercise {
    public static void main(String[] args){
        int[] arr = {1,2,3};
        do{
            int[] arr2 = new int[arr.length + 1];
            for(int I = 0; I < arr.length; I++){
                arr2[i] = arr[i];
                }
            Scanner myScanner = new Scanner;
            System.out.println("请输入需要添加的元素");
            int num = myScanner.nextInt();
            arr2[arr2.length - 1] = num;
            arr = arr2;
            for(int I = 0; I < arr.length; I++){
                System.out.println(arr[i]);
                }
            System.out.println("请问是否继续添加,y/n");
            char word = myScanner.next().charAt(0);
            if(word == 'n'){
                break;
                }

          }while(true);

    }
}

6.9  排序的介绍

        排序是将多个数据,依指定的顺序进行排列的过程。

        内部排序法:指将需要处理的所有数据都加载到内部存储器中进行排序。(交换式排序法、选择式排序法和插入式排序法)

        外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。(合并排序法和直接合并排序法)

6.10  冒泡排序法 Bubble Sorting

        冒泡排序的基本思想是:通过对待排序序列从后向前(下标从较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部。

6.11  冒泡排序

         int[] a = {24,69,80,57,13];//5个元素,一共进行4轮排序(外层),每一轮里面又进行5-i次循环(内层),i表示第几轮排序;进行比较如果前面大于后面就交换

public class Exercise {
    public static void main(String[] args){
        int[] a = {24,69,80,57,13};
        int temp = 0;
        for(int I = 0; I < a.length - 1; I++){
            for(int j = 0; j < a.length - I -1; j++){
                    if(a[j] > a[j + 1]){
                            temp = a[j];
                            a[j] = a[j +1];
                            a[j + 1] = temp;
                }
            }
        for(int j = 0; j < a.length; j++){
            System.out.print(arr[j] + " ");
        }
        }
    }
}

​​​​​​​​​​​​​​6.12  查找

        常用顺序查找 SeqSearch 和 二分查找(算法讲解)

        记:字符串寻找  变量名.equals(数组名);利用index = -1 来判断是否结束

import java.util.Scanner;
public class Exercise {
    public static void main(String[] args){
        String[] names = {张三,李四,王二,段利昌};
        System.out.println{"请输入您要查找的姓名"};
        Scanner myScanner = new Scanner(System.in);
        String inputName = Scanner.next();
        int index = -1;
        
        
        for(int I = 0; I < names.length; I++{
            if(inputName.equal(names[I])){
                System.out.println{"恭喜你找到了"};
                System.out.println{"名字为" + arr[i] + "下标为" + i};
                index = I;
                break;
            }
        }
        if(index == -1){
            System.out.println("没找到");
        }
    }
}

6.13  多维数组--二维数组

        可以理解成原来的一维数组的每个元素是一维数组,就构成二维数组  形式[][]

6.14  二维数组的使用

        二维数组的每个元素是一维数组,所以如果要得到每个一维数组的值需遍历两次。

public class Exercise {
    public static void main[String[] args]{
        int[][] a = {{1,2,3},{4,5,6},{7,8,9}};
        for(int I = 0; I < a.length; I++){
            for(int j = 0; j < a[I].length; j++){
                    System.out.print(arr[i][j] + " ");
            }
        }

    }
}

        使用方式1 : 动态初始化

        类型[][] 数组名 = new 类型[大小][大小]; int[][] a = new int[3][4];

        使用方式2 : 动态初始化

        先声明:类型[][]  数组名;在定义(开辟空间) 数组名 = new 类型[大小][大小];

        使用方式3 :动态初始化--列数不确定

        i = 0 : j = 1;  i = 1 : j = 2, 2; i = 2 : j = 3, 3, 3;

public class Exercise {
    public static void main(String[] args){
        int[][] a = new int[3][];
        for(int I = 0; I < a.length; I++){
            a[I] = new int[I + 1];
            for(int j = 0; j < a[I].length; I++){
                    a[I][j] = I + 1;
            }
        for(int I = 0; I < a.length; I++){
            for(int j = 0; j < a[I].length; j++){
                
                    System.out.print(a[I][j] + " ");
                }
        
            }
        }
    }
}

        使用方式4 :静态初始化

        类型[][] 数组名 = {{值1,值2...},{值1,值2...},{值1,值2...},{值1,值2...}};

6.15  二维数组应用案例

        杨辉三角

6.16  二维数组使用细节和注意事项

         声明方式:int[][] y    int[] y[]    int y[][]

        二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。

标签:arr,int,++,length,查找,数组,排序,public
From: https://www.cnblogs.com/aduantongxue/p/16602227.html

相关文章

  • 堆排序 与 比较器
    堆排序假如给你一无序的数组,经过堆排序获得一组降序的数组1、首先我们将数组遍历,进行heapInsert,变为一个大根堆,建立堆的过程方法一:正序遍历+heapInsertO(N*logN)当需......
  • 【排序】各类排序算法的时间性能比较
    用https://www.luogu.com.cn/paste/nzx555us中代码在此题运行时限\(\tt1s\),空间限制\(\tt256MB\)。插入排序冒泡排序选择排序希尔排序快速排序归并排......
  • 数组常见操作
    8.19day7数组常见操作获取数组最值public static int maxElement(int[]arr){//假设第一个元素的值就是最大值int max =arr[0];//遍历数组元素,依次和......
  • 拓扑排序
    拓扑排序拓扑序列是关于有向图的拓扑序列:对于图中的每条边(x,y),x在序列A中都出现在y之前,则称A是该图的一个拓扑序列也就是说,把图中每一个点按拓扑序排好后,每一个点都......
  • php对很大的二维数组做去重和求差集操作:array_filter太慢,array_map配合array_diff速度
    需求:长度大约10万级别的二维数组,元素内数组长度10个左右(其实就是一个数据表的结果集合),根据指定字段对数据进行去重,最后要得到去重后被丢弃的数据明细。 两个关键过程:......
  • leetcode数组题目
    1.两数之和1.1题目描述给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种......
  • 数组
    数组数组的定义是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成。其中,每一个数据称为一个数组的元素,每个数组元素可以通......
  • 求两个数组的相同元素
    1a=#(1,2,3,4)2b=#(1,2,4,5,6,3)3c=#(9,2,3,7,5,6,4)4d=#(1,2,3,4,8)56fngetsamearr=7(ref=arr[1]8fori=1toarr.count-1do(9......
  • 二分查找的模板
    二分查找的难度不低:从定义上来看:为什么需要二分查找大神总结:[]:https://leetcode.cn/circle/article/xYBtLt/#迭代版模板......
  • 快速排序
    1.快速排序——分治#算法原理:在给定序列找到一个点x使得x左边区间数都小于x,右边区间数都大于x#步骤:确定分界点随机,可以是第一个数调整区间使左边都小于分......