实际开发中,我们经常会数组来保存数据,在数据结构中,数组作为计算机中一种常用的数据存放结构。是我们必须掌握的一种数据存储结构。这里我们来学习就是关于数组一个特别常用的方法-二分查找法。

       在我们写程序的时候,我们经常要通过数组,链表,栈或者集合等来查找某个数据项。当我们使用数组的时候,可能我们就会特别容易想到二分查找法,来帮我们查找某一数据项。因为这种方法相比数组的线性查找要高效的多,尤其是对于数组特别大的时候。就会显得特别有用。

      二分查找的前提,就是待查找数组必须是有序数组,这一点很重要,不然,该方法是无法实现的。所以我们拿到一个数组,先做一下数组的排序,再来使用该方法。

    二分查找和我们以前玩的一个猜数字游戏的方法是一样的。游戏开始时,由一个人选中一个数字,这个数字在0到100之间。你猜了一个数字后,则提示你猜大了,还是猜小了,或者猜中了。我们为了最少次数猜中,可能会想到从中间开始猜,一般我们会猜50.如果猜小了,我们则将范围缩小至51到100,继续从中间开始猜起,所以我们下一次猜就是75.这样,一步一步通过缩小范围来猜,直至猜到最后一个数字,一定就是答案了。所以我们使用这种方法最多使用7次就可以达到目标,但是如果我们使用常规的方法,从1到100来任意来猜,是不是最多使用100次,所以我们知道使用二分查找是多么的事倍工半啊。在java中我们也常用数组查找,那么我们使用java程序来表示二分查找法。下面是一段java代码.通过find方法将数组数据项对半分割查找特定项。

public int find(long[] searchArrays,long key){

     int minBound = 0;

     int maxBound =  searchArrays.length - 1;

     int curIndex = 0;

     while(true){

         curIndex  = ( minBound + maxBound)/2;

         if(searchArrays[curIndex ] == key)    

                  return curIndex;

        else if(minBound > maxBound)

                 return "无法找到该数据项";

         else {

                 if(searchArrays[curIndex ] < key)

                       minBound  =  curIndex +1;

                   else

                      minBound  =  curIndex -1;

           }

       }
}