日常算法——二分法查找

本贴最后更新于 2600 天前,其中的信息可能已经水流花落

二分法查找

二分法也叫折半查找,当数据量很大适宜采用该方法。采用二分法查找时,数据必须是有序且不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。

代码实现

package Suanfa;

/**
 * Created by hushangjie on 2017/11/9. 
*/
public class BinarySearch {
    private int[] arr;

    public BinarySearch(int[] arr) {
        this.arr = arr;
    }

    public int searchRecursion(int target) {
        if (arr != null) {
            searchRecursion(target, 0, arr.length);
        } else {
            return -1;
        }
    }

    public int searchRecursion(int target, int start, int end) {
        if (start > end) {
            return -1;
        }
        int mid = (start + end) / 2;
        if (arr[mid] == target) {
            return mid;
        } else if (target > arr[mid]) {
            searchRecursion(target, mid + 1, end);
        }else {
            searchRecursion(target, start, mid -1);
        }

    }
} 

特点

二分法查找要求数列本身有序,如果无序还需排序,当我们从数据库针对某个字段进行排序的时候,需要找出某个值得元素时,就比较适合二分查找了。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...