【查找】二分法查找
二分查找的原理:
算法定義三個(gè)變量已經(jīng)排好序的數(shù)據(jù)中耳鸯,不斷地將中間參考值與被查找的值作比較。如果被查找的值小于中間參考值鲤氢,則算法將搜索范圍縮小一半,在的左半部分查找飘痛;如果被查找的值大于中間參考值則算法將搜索范圍縮小一半,在str[mid]的左半部分查找。知道被查找的值str[mid],就會(huì)返回下標(biāo)mid灵奖。倘若沒有查找到嚼沿,則返回-1;
public static int BinarySearch(int key,int[] str)
{
int lo=0; //數(shù)值中的最低位
int hi=str.length-1; //數(shù)值中的最高位
while(lo<=hi)
{
int mid=lo+(hi-lo)/2; //中間位桑寨,用于與要尋找的值作比較
if(key<str[mid])
hi=mid-1; //如果被尋找的值在str[mid]左邊伏尼,則在左半邊尋找
if(key>str[mid])
lo=mid+1; //如果被尋找的值在str[mid]右邊,則在右半邊尋找
if(key==str[mid])
return mid; //如果被尋找值等于ste[mid]尉尾,就返回?cái)?shù)組的下標(biāo)mid
}
return -1;
}
舉例:
mian()函數(shù):
public static void main(String args[]){
int[] a={5,10,12,15,28,34,56,72};
int b=BinarySearch(28,a);
if(b!=-1)
System.out.println("數(shù)組當(dāng)中存在該值爆阶,在第"+(b+1)+"個(gè)");
else
System.out.println("數(shù)組當(dāng)中不存在該值");
}
舉例結(jié)果:ForceSearch:暴力尋找一個(gè)個(gè)數(shù)據(jù)尋找,數(shù)據(jù)無需排序沙咏;但是處理上百萬的數(shù)據(jù)就會(huì)困難辨图。
public static int ForceSearch(int key ,int str[])
{
for(int i=0;i<str.length;i++)
{
if(key==str[i])
return i;
}
return -1;
}