2018-05-05 二分查找

二分查找

二分查找的思想其实是为了减少搜索范围,每次缩减一半,这样就可以快速找到对象。

1.二分查找的对象

二分查找的对象是有序的数组。如果一个数组没有按顺序排好则无法应用二分查找。

2.二分查找用例

package com.mingguo.zjut.main;

public class BinarySearch {

    public static int rank(int key,int a[]){
        int L = 0;
        int R = a.length - 1;
        while(L<=R){
            int mid = L +(R-L)/2;
            if(a[mid]==key){
                return mid;
            }else if(a[mid] > key){
                R = mid - 1;
            }else if(a[mid] < key){
                L = mid + 1;
            }
        }
        return -1;
    }
    public static void main(String[] args) {
        int newArray [] = {
            1,2,3,4,5,6,7,8
        };
        System.out.println(rank(1,newArray));
    }

}

3.二分查找过程

上述二分查找代码是用rank()函数实现的,该函数接受一个整数和一个已经有序的int数组作为参数。如果该键存在于数组中则返回他的索引,否则返回-1。该算法使用了两个变量L和R,并保证如果该键存在于数组中,则它一定在a[L..R]中,然后方法进入下一次的循环,不断的将数组的中间键(索引为mid)和被查找的键比较。如果查找的键等于a[mid],返回mid;否则算法就会将范围缩小为原来的一半,如果被查找的键小于a[mid]就继续在左半边找,如果被查找的键大于a[mid]就继续在右半边找。算法找到该键或者查找范围为空(L>R)时该过程结束。二分查找之所以快是因为它只需检查很少几个条目(相对于数组的大小)就能找到目标元素(或者确认目标元素不存在)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 13,003评论 0 7
  • 1 前言 二分查找本身是个简单的算法,但是正是因为其简单,更容易写错。甚至于在二分查找算法刚出现的时候,也是存在b...
    __七把刀__阅读 5,298评论 0 1
  • 数据结构与算法--查找之顺序查找和二分查找 符号表的目的是将一个键和一个值关联起来,可以将一对键值对插入到符号表中...
    sunhaiyu阅读 5,797评论 1 2
  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 5,346评论 0 1
  • 痛莫过于彼此有爱却相互伤害,伤人者从不以为自己在伤人。人们往往很自信和自以为对的事要求朋友亲人必须如何如何做,哪怕...
    追忆灯火阑珊阅读 6,062评论 0 0