15、java中的Arrays工具类和算法

算法

1、 常见的算法
排序算法:
冒泡排序算法
选择排序算法
查找算法:
二分法查找
2、java已经将算法封装好了,直接调用就行。面试可能会碰上。
例如:java中提供了一个数组工具类:
java.util.Arrays
Arrays是一个工具类。其中sort()方法可以排序,sort()方法是静态方法,直接类名调用就行。

冒泡排序算法

1、概念:每一次循环结束之后,都要找出最大的数据,放到参与比较的这堆数据的最右边。(冒出最大的那个气泡)
2、核心:左边的数字和右边的数字比对,当左边>右边的时候,交换位置。
3、代码实现

public class BubbleSort {
    
    
    public static void main(String[] args) {
    
    
        //冒泡排序算法
        //3、2、7、6、8
        //int类型的数组对象
        int[] arr = {
    
    3,2,1,6,8};
        //经过冒泡排序算法进行排序

        for (int i = arr.length-1;i>0;i--){
    
    
            for (int j = 0; j < i; j++) {
    
    
                if (arr[j]>arr[j+1]){
    
    
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int i =0;i < arr.length;i++){
    
    
            System.out.println(arr[i]);
            //12358
        }


    }
}

选择排序

1、概念:
循环一次,然后找到参加比较这对数据中最小的,拿着这个最小的和最前面的换位置。
选择排序比冒泡排序的效率高。
2、代码的实现

public class SelectSort {
    
    
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    3,1,6,2,5};
        
        for (int i = 0; i < arr.length - 1; i++) {
    
    
            //假设i是最小的
            int min = i;
            for (int j = i+1;j<arr.length;j++){
    
    
                //找出后面的最小值
                if (arr[j]<arr[min]){
    
    
                    min = j;
                }
            }
            //i不是最小的,就交换位置
            if(min != i){
    
    
                int temp;
                temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
        //遍历输出结果
        for (int i = 0; i < arr.length; i++) {
    
    
            System.out.println(arr[i]);

        }
    }
}

二分法查找

1、普通查找数组元素的方法

public class ArraySearch {
    
    
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    4,5,6,87,8};
        //普通方法查找元素
//        for (int i = 0; i < arr.length; i++) {
    
    
//            if (arr[i] == 87){
    
    
//                System.out.println("87的下标是" + i);
//            }
//        }
//        //不存在该元素
//        System.out.println("不存在该元素");

        //封装一个方法
        //一次参数的数组,一个是查找的元素
        //返回被查找的元素的下标
        //找不到返回-1
        int index = arrysearch(arr,87);
        //如果inesx等于-1的话,该元素不存在,否则该元素下标是
        System.out.println(index ==-1 ? "该元素不存在" : "该元素下标是:"+index);
    }

    //数组中检索数组的下标
    public static int arrysearch(int[] arr, int ele) {
    
    
        for (int j = 0; j < arr.length; j++) {
    
    
            if (ele == arr[j]){
    
    
                return j;
            }
        }
        return -1;
    }
}

2、代码实现

public class ArrayUtil {
    
    
    public static void main(String[] args) {
    
    
        int[] arr= {
    
    100,200,230,600,1000,2000,9999};

        //调用方法
        int index = binarySearch2(arr,200);
        System.out.println(index == -1 ? "该元素不存在!" : "该下标是" + index);
    }

    /**
     * 从数组中查找目标元素的下标
     * @param arr   被查找的数组,必须是排序的
     * @param dest  目标元素
     * @return
     */


    public static int binarySearch2(int[] arr, int dest) {
    
    
        //开始下标
        int begin = 0;
        //结束下标
        int end = arr.length;
        while(begin<=end) {
    
    
            //中间下标
            int mid = (begin + end) / 2;

            if (arr[mid] == dest) {
    
    
                return mid;
            } else if (arr[mid] < dest) {
    
    
                //  目标在中间值的右边
                //开始元素的下标需要进行修改(开始元素的下标需要重新赋值)
                begin = mid + 1;
            } else {
    
    
                //arr[mid]>dest
                //需要重新修改结束的下标
                end = mid - 1;
            }
        }
        return -1;
    }

}

猜你喜欢

转载自blog.csdn.net/Alopecian/article/details/114685668