您的位置:首页 > 编程语言 > Java开发

二分法,递归和非递归方式 实现(Java)

2016-08-03 22:42 381 查看
//时间复杂度:O(logn)
package binarySearch;

public class BinarySearch {

//非递归
public static int binarySearch(int[] a,int goal){
int high = a.length - 1;
int low = 0;
int mid  = 0;
while(low <= high){
mid = (high - low)/2+low;//(high+low)/2容易溢出
if(a[mid] == goal){
return mid;
}
else if(a[mid] < goal){
low = mid +1;
}
else
high = mid - 1;
}
return -1;
}

//递归
public static int binarySearch(int[] a,int low,int high,int goal){
while(low <= high){
int mid = (high - low)/2 + low;
if(a[mid] == goal){
return mid;
}
else if(a[mid] < goal){
return binarySearch(a,mid+1,high,goal);
}
else
return binarySearch(a,low,mid-1,goal);
}
return -1;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,2,3,4,5,6,7,8,9};
System.out.println(binarySearch(a,0,a.length - 1,2));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐