实际开发中,我们经常会数组来保存数据,在数据结构中,数组作为计算机中一种常用的数据存放结构。是我们必须掌握的一种数据存储结构。这里我们来学习就是关于数组一个特别常用的方法-二分查找法。
在我们写程序的时候,我们经常要通过数组,链表,栈或者集合等来查找某个数据项。当我们使用数组的时候,可能我们就会特别容易想到二分查找法,来帮我们查找某一数据项。因为这种方法相比数组的线性查找要高效的多,尤其是对于数组特别大的时候。就会显得特别有用。
二分查找的前提,就是待查找数组必须是有序数组,这一点很重要,不然,该方法是无法实现的。所以我们拿到一个数组,先做一下数组的排序,再来使用该方法。
二分查找和我们以前玩的一个猜数字游戏的方法是一样的。游戏开始时,由一个人选中一个数字,这个数字在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;
}
}
}
转载于:https://blog.51cto.com/heshuilin/1178052