面试中经常会问到二分查找,二分查找的两种实现: 第一种是用递归实现的,第二种使用循环实现的。
package com.lzw;
public class Binary {
/**
* 二分查找的实现
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[]={1,2,3,4,5,6,7,8,9,10};
text t=new text();
System.out.println("第一种二分查找:");
System.out.println(t.Binary_search(array, 0,9, 6));
System.out.println("第二种二分查找:");
System.out.println(t.Binary_search(array, 10, 6));
}
}
class text
{
public int Binary_search(int array[],int low,int high,int value)
{
//边界判断
if(low>high||array[low]>value||array[high]<value)
return -1;
while (low<high) {
int middle=(high-low)/2+low;
if(array[middle]==value)
return middle;
else if(array[middle]<value)
return Binary_search(array,middle+1,high,value);
else {
return Binary_search(array,low,middle-1,value);
}
}
return -1;
}
public int Binary_search(int array[],int length,int value)
{
if(length<=0)
return -1;
int low=0;
int high=length-1;
while(low<high)
{
int middle=(high-low)/2+low;
if(array[middle]==value)
return middle;
else if(array[middle]<value)
low=middle+1;
else
high=middle-1;
}
return -1;
}
}
程序运行结果为: