算法定义:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置的值则在数列的后半段中继续查找,直到找到为止。
适用场景:当数据量很大时,数据有序但是不重复;
java代码如下所示(直接取用BinarySearch即可测试):
package test;
import java.util.*;
class BinarySearch{
private int[] data;
private int key;
BinarySearch(int[] data,int key){
this.data=data;
this.key=key;
}
public int startSearch(){
int result=-1;
int begin=0;
int end=data.length-1;
int mid=0;
while(begin<=end){
mid=(end-begin)/2+begin;
if(key<data[mid])
end=mid-1;
else if(key>data[mid])
begin=mid+1;
else{
result=mid;
break;
}
}
return result;
}
}
public class solution4_search {
public static void main(String[] args){
int[] nums={1,2,3,4,5,6,7,8,9};
BinarySearch b=new BinarySearch(nums,4);
System.out.println(b.startSearch());
}
}