二分查找算法

Posted tengpan-cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找算法相关的知识,希望对你有一定的参考价值。

使用循环实现&使用递归实现

package com.pt.spring.learn.bean;

import java.util.ArrayDeque;
import java.util.Queue;

public class BinFind {
    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 3, 4, 5, 7, 8, 9, 10};
        System.out.println(binFind(array, 0, 8, 8));
        System.out.println(binSearchLoop(array, 0, 8, 9));
    }

    public static int binSearchLoop(int[] array, int startIndex, int endIndex, int objectValue) {
        Queue<int[]> paramsQueue = new ArrayDeque<>();
        paramsQueue.add(new int[]{startIndex, endIndex});
        while (!paramsQueue.isEmpty()) {
            int[] tmpParams = paramsQueue.poll();
            startIndex = tmpParams[0];
            endIndex = tmpParams[1];
            if (objectValue > array[endIndex] || objectValue < array[startIndex] || startIndex > endIndex) {
                return -1;
            }
            if (startIndex == endIndex && array[endIndex] != objectValue) {
                return -1;
            }

            int mid = (startIndex + endIndex) / 2;
            if (array[mid] == objectValue) {
                return mid;
            }

            if (array[mid] > objectValue) {
                paramsQueue.add(new int[]{startIndex, mid});
            } else {
                paramsQueue.add(new int[]{mid + 1, endIndex});
            }
        }
        return -1;
    }

    public static int binFind(int[] array, int startIndex, int endIndex, int objectValue) {
        if (objectValue > array[endIndex] || objectValue < array[startIndex] || startIndex > endIndex) {
            return -1;
        }
        if (startIndex == endIndex && array[endIndex] != objectValue) {
            return -1;
        }

        int mid = (startIndex + endIndex) / 2;
        if (array[mid] == objectValue) {
            return mid;
        }

        if (array[mid] > objectValue) {
            return binFind(array, startIndex, mid, objectValue);
        } else {
            return binFind(array, mid + 1, endIndex, objectValue);
        }
    }


}

 

以上是关于二分查找算法的主要内容,如果未能解决你的问题,请参考以下文章

python算法:二分查找

java 二分查找法

二分查找算法讲解及其C++代码实现

leetcode查找算法(顺序查找,二分法,斐波那契查找,插值查找,分块查找)

二分查找算法

python算法之二分查找