二叉搜索(Binary Search)

二叉搜素是一种非常简单易懂的快速查询方法,它要求底层存储结构是数组,且数组有序。核心思想有点类似分治算法,每次通过跟区间中间的数据作比较来排除一半的数据,从而缩写搜寻范围,直到找到查找元素或者范围缩小到0.
过程如下图所示:


二叉搜索(Binary Search)_第1张图片
image.png

java 代码实现

package search;

import org.junit.Test;

public class BinarySearch {
    public int search(int[] data, int value){
        if(data == null || data.length == 0) return -1;
        int start = 0;
        int end = data.length - 1;
        while(start <= end){
            int mid = (end - start)/2 + start;
            if(data[mid] == value){
                return mid;
            }
            if(data[mid] < value){
                start = mid + 1;
            }
            else{
                end = mid - 1;
            }
        }
        return -1;
    }
    @Test
    public void findTest(){
        int[] data = new int[]{1,2,3,4,5,6};
        int index = search(data, 6);
        System.out.println(index);
    }
}

看完这个是不是觉得二叉搜索很简单啊。这只是最简单的二叉搜索而已,二叉搜索还有很多其他的变形,而这些变形才是真正应用的比较多的。
下面给出几个常见问题,大家可以先思考一下,然后再对照我的实现和你的实现对比一下:

  1. 查找第一个值等于给定值的元素
  2. 查找最后一个值等于给定值的元素
  3. 查找第一个值大于等于给定值的元素
  4. 查找最后一个值小于等于给定值的元素

你可能感兴趣的:(二叉搜索(Binary Search))