数组概念、使用方法及排序

一 : 数组

当同类型的数据多的时候 通过变量来表示 不现实

概念 : 装相同类型指定个数个数据的容器

明确1 : 数组是容器: 装多个数据 : 是复杂数据 不再是基本数据类型

明确2 : 数组创建时必须明确所装的数据类型

明确3 : 数组创建时必须明确所装的数据的个数

类型 : 引用数据类型(非八种基本数据类型 byte short char int long float double boolean)

对象 : 复杂的数据

元素 : 数组中的数据称之为数组的元素

关键字 : [ ]

//创建数组:装所有同学的年龄
//必须指定元素类型:int
//必须指定元素个数:27
//创建数组格式1:元素类型[] 对象名=new 元素类型[元素个数];
  int[] arr1=new int[27];
  int   age =11;
//创建数组格式2:元素类型[] 对象名=new 元素类型[]{值1,值2,值3...};
  int[]  arr2=new int[] {20,21,23,24,22};
//创建数组格式3:元素类型[] 对象名={值1,值2,值3...};
  int[]  arr3={1,5,6,7,8,3};

二 : 创建数组语句详解

int[] arr=new int[20]

int[] arr4=new int[27];
    //左边: int[] arr4: 定义一个引用arr4   此引用要指向一个int类型的数组
    //右边: new int[27]; 创建一个装27个int类型数据的数组对象
    //     new 创建对象的关键字
    //     []  创建的对象是数组
    //     int 27 : 此数组装27个int类型的元素
    //  = :左边的数组名指向右边的数组对象

    //打印变量  打印的是变量的值
         System.out.println(age);//11
    //打印引用  打印的是引用指向的对象类型@对象内存地址

三 : 数组优点

//1数组会为其中的元素自动分配编号(索引  下标  编号)
//       索引从0开始
//2 通过数组名+编号即可调用对应下标处的元素
//        格式:对象名[索引]
      int[] arrAge= {1,2,3,4,5};
      arrAge[2]=4;//给下标为2的元素赋值
      System.out.println("第三个元素的值="+arrAge[2]);

四 : 数组使用

//注意事项1:arrAgeNew=arrAge:俩个引用指向同一个对象
      int[] arrAgeNew;//定义一个数组名
      arrAgeNew=arrAge;//让引用arrAgeNew指向arrAge指向的数组对象
                       //其实是给40行的对象又新起的名字arrAgeNew
      arrAgeNew[0]=1;
      System.out.println(arrAge[0]);

//注意事项2:每个new就是创建一个新的对象
      int[] arra=new int[12];
      int[] arrb=new int[12];//俩个引用arra  arrb指向不同的数组对象
      arrb=new int [12];//让引用arrb指向新的对象

//注意事项3: 方式3不能把定义引用和创建对象分开写
//创建数组格式3:元素类型[] 对象名={值1,值2,值3...};
//是格式2的简化方式:编译器会自动补齐为:
//  元素类型[] 对象名=new 元素类型[]{值1,值2,值3...};
      short[] arrc = {1,2,3,4,5}; 
      //short[] arrc= new short[]{1,2,3,4,5};
      int arr[];
     //arr= {1,2,3}//报错

//注意事项4:当访问的下标不存在时:报错:ArrayIndexOutOfBoundsException
//	      System.out.println(arrc[6]);
//		  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
//		  at com.zhiyou100.day03.array.Demo03Array.main(Demo03Array.java:62)

//注意事项5:知道元素具体值就用方式2  3  不知道元素具体值就使用方式1
        int[] arrAge1=new int[27];//对班级年龄进行统计
        int[] arrAge2=new int[] {1,2,3,4,5};//排序
//注意事项6:数组中的元素有默认初始值(取决于元素的类型)
          System.out.println((new byte[1][0]));//0
          System.out.println((new short[1][0]));//0
          System.out.println((new int[1][0]));//0
          System.out.println((new char[1][0]));//''
          System.out.println((new long[1][0]));//0L
          System.out.println((new float[1][0]));//0.0f
          System.out.println((new double[1][0]));//0.0
          System.out.println((new boolean[1][0]));//false

五 : 排序

5.1 互换值

//实现俩个变量互换值
    int a=2,b=4;
    System.out.println("a="+a+",b="+b);
    int k=a;//a=2 b=4 k=2
    a=b;//a=4 b=4 k=2
    b=k;//a=4 b=2 k=2
    System.out.println("a="+a+",b="+b);//a=4 b=2
    a=a+b;//a=6 b=4
    b=a-b;//a=6 b=2
    a=a-b;//a=4 b=2

5.2顺序排序

概念 : 依次拿当前元素和其后面所有元素做比较

//顺序排序
    arr=new int[] {1,5,2,7,6,3};
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]+(i==arr.length-1?"\n":";"));
    }
    //1打印比较细节
    //外层for循环控制比较的轮数:arr[i]作为当前元素
    for (int i = 0; i < arr.length-1; i++) {
        //内层for循环控制本轮比较的次数: arr[j]作为当前元素后面的所有元素
        for (int j = i+1; j < arr.length; j++) {
            //拿arr[i]和arr[j]作比较
            System.out.print("arr["+i+"]-arr["+j+"]\t");
        }
        System.out.println();
    }
    //2 把打印更改为互换
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = i+1; j < arr.length; j++) {
            //拿arr[i]和arr[j]作比较
            if(arr[i]<arr[j]) {
                int k=arr[i];
                arr[i]=arr[j];
                arr[j]=k;
            }
        }
    }
    //打印数组元素
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]+(i==arr.length-1?"\n":";"));
    }
}

5.3冒泡排序

依次拿相邻元素做比较

打印比较细节

for (int i = 0; i < arr.length-1; i++) {
    for (int j = 0; j < arr.length-i-1; j++) {
        //拿arr[j]和arr[j+1]
        System.out.print("arr["+j+"]-arr["+(j+1)+"]\t");
    }
    System.out.println();
}

把打印更改为比较

for (int i = 0; i < arr.length-1; i++) {//保证比较length-1轮
    for (int j = 0; j < arr.length-i-1; j++) {
        //拿arr[j]和arr[j+1]
        //让arr[j]作为相邻元素前面的元素
        //让arr[j+1]作为相邻元素后面的元素
        if (arr[j]>arr[j+1]) {
            int k=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=k;
        }
    }
}

5.4 : 顺序排序和冒泡排序的比较

顺序排序和冒泡排序效率完全一样

顺序排序和冒泡排序外层for循环代码完全相同

顺序排序内层for循环 变量j从i+1开始 到length结束

冒泡排序内层foe循环 变量j从0开始 到length-i-1结束

顺序排序比较时 是拿arr[i]和arr[j]比较

冒泡排序比较时 是拿arr[j]和arr[j+1]比较

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值