Java 常用算法之查找算法

通用

public static int[] getArray() {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }
        return array;
}

1、順序查找

public class Find {

    public static int count = 0;

    public static void main(String[] args) {
        int[] array = getArray();
        System.out.println("index:" + find(array, 30));
    }

    public static int find(int[] array, int value) {
        for (int index = 0; index < array.length; index++) {
            count++;
            if (array[index] == value) {
                System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
                return index;
            }
        }
        System.out.println("沒有找到!");
        return -1;
    }
}

循環了30次,找到了!
index:29

2、二分法查找

public class Find2 {

    public static int count = 0;

    public static void main(String[] args) {
        int[] array = getArray();
        System.out.println("index:" + find(array, 30));
    }

    public static int find(int[] array, int value) {
        int start = 0;
        int end = array.length - 1;
        int mid;
        while (start <= end) {
            count++;
            mid = (start + end) / 2;
            if (array[mid] == value) {
                System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
                return mid;
            } else if (array[mid] < value) {
                start = mid + 1;
            } else if (array[mid] > value) {
                end = mid - 1;
            }
        }
        System.out.println("沒有找到!");
        return -1;
    }
}

循環了7次,找到了!
index:29

3、插值查找

public class Find3 {

    public static int count = 0;

    public static void main(String[] args) {
        int[] array = getArray();
        System.out.println("index:" + find(array, 30, 0, array.length - 1));
    }

   public static int find(int[] array, int value, int start, int end) {
        count++;
        if (start > end || value < array[0] || value > array[array.length - 1]) {
            return -1;
        }
        int mid = start + (end - start) * (value - array[start]) / (array[end] - array[start]);
        if (array[mid] == value) {
            System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
            return mid;
        } else if (array[mid] < value) {
            return find(array, value, mid + 1, end);
        } else if (array[mid] > value) {
            return find(array, value, start, mid - 1);
        }
        System.out.println("沒有找到!");
        return -1;
    }
}

循環了1次,找到了!
index:29

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章