• 数组


    数组:

    数组Array即一组数据模式用来记录多个类型相同的数据

    特点:

      1.数组长度不可变

      2.数组可存储基本类型,也可以存储引用类型

      3.数组在内存中是连续存储数据的

      4.数组通过索引(下标)对连续数据进行访问的

    如何实现数组元素的删除:

      1.判断待删除的元素是否在数组中

      2.将删除元素的最后一位依次向前移动

      3.最后位元素不进行打印

    如何实现数组元素的添加(数组值必须连续递增):

      1.查找要添加元素在数组中的位置

      2.该位置为第一次比新增值大的元素索引

      3.从数组最后位开始向前依次交换元素

      4.将新增值写入查找位置

    如何查找最大值:

      1.设定一个元素为最大值

      2.依次将每个元素与最大值进行比较

      3.比最大值更大的元素将成为新的最大值

    常用的排序算法:

      1.冒泡排序法(最大值在最后)

        1)将相邻元素依次比较,如果后一个较小则交换位置

        2)通过一轮比较(数组中每个元素都比较依次),数组中的最大值将产生在最后

        3)已经产生的最大值不再参与比较,开启下一轮比较

        4)每轮都产生一个最大值

        5)直至只有一个元素时结束排序

      2.选择排序法

        1)将第一个数作为最小值依次和后面的每个元素进行比较

        2)如果后面的元素比第一个元素小,则交换两数

        3)一轮比较后,第一个元素即为最小值

        4)第二轮比较从第二个元素开始,依次和后面的每个元素分别比较,比较过后产生第二个最小值在第二位

      3.快速排序法(二分排序法):

        1)将第一个数定位基准数:1)j负责从右往左查找比基准数(第一个数)小的数

                     2)i负责从左往右查找比基准数(第一个数)大的数

        2)若i和j没有碰头,且都找到了,则将两数array[ i ]和array[ j ] 交换,这样左边的就是小的,右边的就是大的

        3)知道 i 和 j 相遇,则此处即为基准数应该在的地方,将array[ left ]与array[ i ]交换

        4)第一轮结束后,则在基准数位置即i与j相遇处将数组一分为二

        5)重新调用递归该方法,左右边界重新赋值

    创建数组(三种方式):

    /************方式一*********/
    String[] array=new String[5];
    System.out.println(array[0]);
    int[] Array=new int[5];
    System.out.println(Array[1]);
    
    
    /************方式二*********/
    String[] array1=new String[]{"tom","jack","jerry"};
    //访问第二个数值
    System.out.println(array1[1]);
    //访问第一个数值
    System.out.println(array1[0]);
    //访问倒数第二个数值
    System.out.println(array1[array1.length-1]);
    
    /************方式三*********/ String[] array2={"tom","jack","jerry"}; for(int i=0;i<array2.length;i++){ System.out.println(array2[i]); }

    检索数据是否在数组中(没有找到返回-1,找到返回下标):

     public int find(String[] array,String value){
            //默认返回-1
            int index=-1;
            //遍历数组
            for(int i=0;i<array.length;i++){
                //如果有相同的数值
                if(array[i].equals(value)){
                    //返回下标
                    index=i;
                    break;
                }
            }
            return index;
        }

    删除数组中元素的方法:

      方法一:将元素赋值为null:打印时判断是否为null,不为null则打印出来

    public void delete(String[] array,String value){
            //查找是否存在的方法,如果存在返回下标,如果不存在返回-1
            int index=find(array,value);
            //判断值是否在数组中存在
            if(index!=-1){
                //如果存在则赋值为null
                array[index]=null;
            }
        }    

      方法二:向前赋值法:打印时不打印最后一位

     public void delete2(String[] array,String value){
            //数组中是否存在该值的方法,不存在返回-1,存在返回下标
            int index=find(array,value);
            if(index!=-1){
                //循环遍历
                for(int i=index;i<array.length;i++){
                    //从查找为null的位置开始,从后向前覆盖
                    array[i]=array[i+1];
                }
            }
     }

    数组中的最大值

      public int findMax(int[] array){
          //先确定一个最大值,确定为第一个最方便
          int max=array[0];
          //从第二个开始比较
          for(int i=1;i<array.length;i++){
              //如果数值大于指定的最大值,将值赋值给最大值
              if(array[i]>max){
                  max=array[i];
              }
          }
          return max;
      }

     冒泡排序法:

    public void sort(int[] array){
      //外层循环控制比较的轮数
      //最后一次只剩一个时不用再比较
      for(int i=0;i<array.length-1;i++){
        //内层循环控制每轮要比较的次数
        //循环了多少论,下一轮就少比较多少次(每一轮都多出一个不再参与比较的数)
        for(int i=0;j<array.length-1-i;j++){
          //如果后一位更大,将大的数换到最后
          if(array[j+1]<array[j]){
            //交换两数
            int temp=array[j+1];
            array[j+1]=array[j];
            array[j]=temp;
          }
        }
      }
    }

    选择排序法:

      整个排序方法和冒泡排序方式基本一致,只是冒泡比较的基数在改变

    public void sort(int[] array){
      //外层循环控制轮数
      for(int i=0;i<array.length;i++){
        //内层循环控制每一次比较的轮数,将i索引的元素依次和后面的每个元素进行比较
        for(int j=i+1;j<array.length;j++){
          //升序:如果前一位更小,则将大的往后交换
          if(array[i]>array[j]){
            int temp=array[j];
            array[j]=array[i];
            array[i]=temp;
          }
        }
      }
    }

    快速排序法(二分排序法):

    public void sort(int[] array,int left,int right){
      //判断是否需要继续递归
      if(left==right){
        teturn;
      }
      //定义基准值
      int middle=array[left];
      //i是左边界
      int i=left;
      //j是右边界
      int j=right;
      //当i!=j时,则继续循环
      while(i!=j){
        //进入循环后,j从右往左,不能走过i,若j对应的位置大于基准值,则继续向左前进
        while(array[j]>=middle&&i>i){
          j--;
        }
        //进入循环后,i从左往右,不能走过j,若i对应的位置小于基准值,则继续向右前进
        while(array[i]<=middle&&i<j){
          i++;
        }
        //当i与j停下来且i!=j时,i与j没相遇则将两个数交换,则左边小,右边大
        int temp=array[i];
        array[i]=array[j];
        array[j]=temp;
      }
      //当i与j停下来且i=j时,则将该位置与基准值相交换
      array[left]=array[i];
      array[i]=middle;
      //将原数组分两段继续递归
      sort(array,left,i-1);
      sort(array,i+1,right);
    }

    实现数组元素的插入(数组的原始数据需要连续递增)

  • 相关阅读:
    mysql 定时器
    mysql 存储过程记录
    mysql 常用sql
    mysql 取最后一条数据 分组
    Java8 Stream使用flatMap合并List 交 并 合 差集
    微服务技术栈
    spring boot 拦截 以及Filter和interceptor 、Aspect区别
    在springMVC的controller中获取request,response对象的一个方法
    spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件
    SSRS 2016 Forms Authentication
  • 原文地址:https://www.cnblogs.com/gfl-1112/p/12824930.html
Copyright © 2020-2023  润新知