java数组相关例题实战

一、找出数组中最大元素

public static int max(int[]array) {
    
    
        if(array==null||array.length==0)
        //防止传过来的引用变量没有指向变量或者指向的对象里没有东西
        {
    
    
            return -1;
        }
        int max=array[0];
        for(int i=1;i< array.length;i++)
        {
    
    
            if(max<array[i])
            {
    
    
                max=array[i];
            }
        }
        return max;
    }
    public static void main(String[] args) {
    
    
        int[]arr={
    
    12,9,13,1,0};
        int b=max(arr);
        System.out.println(b);
    }

在这里插入图片描述

二、数组中指定元素的查找

法一:顺序查找,暴力遍历

public static int find(int[]array,int key) {
    
    
//array是要查找的数组、key是要查的元素
        for(int i=0;i<array.length;i++)
        {
    
    
            if(array[i]==key)
            {
    
    
                return i;
            }
        }
        return -1;//没找到
    }
    public static void main(String[] args) {
    
    
        int []arr={
    
    1,9,6,5,7};
        System.out.println(find(arr,6));
        System.out.println(find(arr,0));
    }

在这里插入图片描述
法二:二分法查找

 public static void find(int[]arr,int key) {
    
    
        int left=0;
        int right= arr.length-1;
        while(left<right)
        {
    
    
            int mid = (left + right) / 2;//这里如果本行放在while外,那么mid会一直=(0+9)/2=4,进行一次查找后arr[4]=5<7,left=mid+1=5。left=5<9=right进入循环,arr[4]=5<7...以此循环下去,arr[mid]会永远小于k
            //上一行放while里面是为了,每进行一次循环,都可以重新定义mid
            if (arr[mid] < key)
            {
    
    
                left = mid+1;//arr[mid]<k,说明下标mid在k下标的左边,那么下一次查找应该在mid右边开始查,所以mid+1
            }
            else if (arr[mid] > key)
            {
    
    
                right = mid-1;//arr[mid]>k,说明下标mid在k下标的右边,那么下一次查找应该在mid左边开始查,所以mid-1
            }
            else//mid=k时候
            {
    
    
                System.out.println("找到了,数"+key+"位置为"+"arr["+mid+"]");
                break;//这里因为while条件是left<=right,当恰巧找到的最后一个数是要找的数,left=right=(left+right)/2=mid,这是会while一直循环下去,找到后要break跳出循环
            }
        }
        if (left > right)
        {
    
    
            System.out.println("没有数"+key);
        }

    }
    public static void main3(String[] args) {
    
    
        int []arr={
    
    1,9,6,5,7};
        find(arr,6);
        find(arr,0);
    }

四、检查数组的有序性

public static boolean isUp(int[]arr) {
    
    
        for(int i=0;i<arr.length-1;i++)
        {
    
    //这里i<arr.length-1是因为数组最后一个数下标是length-1,如果和arr.length比较是非法访问
            if(arr[i]>arr[i+1])
            {
    
    
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
    
    
        int []arr={
    
    11,12,3,15,16};
        boolean f=isUp(arr);
        System.out.println(f);
        int []brr={
    
    1,2,3,4,5};
        boolean e=isUp(brr);
        System.out.println(e);
    }

在这里插入图片描述

五、数组(冒泡)排序

public static void bubbleSort(int[]arr) {
    
    
         for(int i=0;i<arr.length-1;i++)
         {
    
    
             for(int j=0;j<arr.length-1-i;j++)
             {
    
    
                 if(arr[j]>arr[j+1])
                 {
    
    
                     int tmp=arr[j];
                     arr[j]=arr[j+1];
                     arr[j+1]=tmp;
                 }
             }
         }
    }
    public static void main(String[] args) {
    
    
        int []array={
    
    11,26,7,18,9,0};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

在这里插入图片描述

六、数组元素的逆置比如1357->7531

public static void nz(int[]arr) {
    
    
        int i=0;
        int j=arr.length-1;
        while(i<j)
        {
    
    
            int tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
            i++;
            j--;
        }
    }

    public static void main(String[] args) {
    
    
        int []arr={
    
    1,3,5,7};
        nz(arr);
        System.out.println(Arrays.toString(arr));
    }

在这里插入图片描述

七、数组数字排列

整形数组,偶数放在前半部分,奇数放在后半部分

public static void change(int[]arr) {
    
    
        int i=0;
        int j= arr.length-1;
        while(i<j)
        {
    
    
            while(i<j&&arr[i]%2==0)
            {
    
    
                i++;
            }//走完while arr[i]为奇数
            while(i<j&&arr[j]%2!=0)
            {
    
    
                j--;
            }//走完while arr[j]为偶数
            int tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
        }
    }
    public static void main(String[] args) {
    
    
        int[]arr={
    
    1,2,3,4,5,6};
        change(arr);
        System.out.println(Arrays.toString(arr));
    }

在这里插入图片描述

八、数组拷贝

一般方法:

public static int[] copy1(int[]arr) {
    
    
        int []copy=new int[arr.length];
        for(int i=0;i<arr.length;i++)
        {
    
    
            copy[i]=arr[i];
        }
        return copy;
    }
    public static void main(String[] args) {
    
    
        int []arr={
    
    1,2,3,4,5};
        int []brr=copy1(arr);
        System.out.println(Arrays.toString(arr));
    }

调用java原有方法:

public static void main(String[] args) {
    
    
        int []arr={
    
    0,9,1,4,5};
        int []brr=Arrays.copyOf(arr,arr.length);
        //第一个参数是被拷贝的数组,第二个参数是拷贝的长度,返回值类型int[]
        System.out.println(Arrays.toString(brr));//打印[0, 9, 1, 4, 5]

        int []crr=Arrays.copyOfRange(arr,1,3);//从arr下标1开始拷贝到下标3,左闭右开区间[1,3)
        System.out.println(Arrays.toString(crr));//打印[9,1]

        int []drr=new int[arr.length];
        System.arraycopy(arr,0,drr,0,arr.length);
        //第一个参数:原数组 第二个参数:从原数组下标哪里开始拷贝 第三个参数:从目标数组哪个位置拷贝进 第四个参数,拷贝长度
        System.out.println(Arrays.toString(drr));//打印[0, 9, 1, 4, 5]

        int []err=arr.clone();//拷贝一个新的副本
        System.out.println(Arrays.toString(err));//打印[0, 9, 1, 4, 5]
    }

关于最后一个.clone(),示意图如下
在这里插入图片描述

在这里插入图片描述

おすすめ

転載: blog.csdn.net/m0_57180439/article/details/121050940