java基础day7-二维数组

二维数组

冒泡排序
   实现数字升序:
   每次比较相邻两数
   小的交换到前面
   每轮结束后最大的数交换到最后
举例:

public class Demo1 {
    public static void main(String[] args) {
        int[] a=new int[10];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*100);
        }
        System.out.println(Arrays.toString(a));
        for (int i = 0; i < a.length-1; i++) {
            boolean isChanged=false;
            for (int j = 0; j < a.length-1-i; j++) {
                if (a[j]>a[j+1]){
                    isChanged=true;
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
            if (!isChanged){
                System.out.println("已经有序,不需要继续比较");
                break;
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

结果如图:
java基础day7-二维数组
图中的随机数组用冒泡排序变成了升序数组,思想就是1、数组从前向后遍历2、相邻两数比较,不满足顺序则交换。这是一种非常简单的排序方法。

Arrays类
我们还可以使用Arrays为数组排序,这就需要使用java.util.Arrays类。这是java.util包提供的工具类,Arrays类提供操作数组的方法,如:排序、查询。Arrays类的sort()方法: 对数组进行升序排列。

方法名称 说明
boolean equals(array1,array2) 比较array1和array2两个数组是否相等
sort(array) 对数组array的元素进行升序排列
String toString(array) 将一个数组array转换成一个字符串
void fill(array,val) 把数组array所有元素都赋值为val
copyOf(array,length) 把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
int binarySearch(array, val) 查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)

多维数组
三维及以上的数组很少使用
主要使用二维数组
从语法上Java支持多维数组
从内存分配原理的角度讲,只有一维数组

二维数组的语法:<数据类型> [ ][ ] 数组名; 或者 <数据类型> 数组名 [ ][ ];
定义二维数组时,要定义最大维数。二维数组实际上是一个以一维数组做为元素的一维数组。
二维数组的定义与赋值:int scores[][] = {{ 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 } };(这个方法不常用)

举例:二分法查找

public class Demo5 {
    public static void main(String[] args) {
        int[] a={10,20,30,40,50,60,70,80,90};
        int num=20;
        int s=0;
        int e=a.length-1;
        for (; s<= e;) {
            if (e==s){
                if (a[s]==num){
                    System.out.println("在下标为"+s+"的位置找到"+num);
                    break;
                }else {
                    System.out.println("没有这个元素");
                    System.exit(-1);
                }
            }
           int mid=(s+e)/2;
           if (a[mid]>num){
               e=mid-1;
           }else if (a[mid]<num){
               s=mid+1;
           }else {
               System.out.println("在下标为"+mid+"的位置找到"+num);
               break;
           }
        }
    }
}

结果如图:
java基础day7-二维数组
二分法查找
1、定义头位置,定义尾位置
2、定义中间位置,与输入的数进行比较
3、如果比中间的数大,头会变成中间位置+1
4、如果比中间的数小,尾会变成中间位置-1
5、如果只有一个元素,比完就结束了
6、只要找到就立刻结束

上一篇:关于git pull --rebase origin master 遇到的问题;


下一篇:git rebase 避免丑陋的分支merge