二分查找算法
2020-03-03 本文已影响0人
132xin
二分查找算法:在使用的前提是数组是排序的, 时间复杂度:O(log2n)
代码:
1.使用递归的方式
/**
* 递归的方法
* @param array 输入的数组
* @param left 最左边的索引
* @param right 最右边的索引
* @param tag 要查找的数
* @return 返回索引
*/
public static int binarySeachForRecur(int[] array,int left,int right,int tag) {
//要判断要查找的数是否在数组的范围里面,减少递归的次数
if(left>right||tag<array[left]||tag>array[right]) {
return -1;
}
int mid=(left+right)/2;
if(array[mid]==tag) {
return mid;
}else if(array[mid]>tag) {
//当mid小于tag时,则需要向左边查找
return binarySeachForRecur(array,left,mid-1,tag);
}else {
//向右边查找
return binarySeachForRecur(array,mid+1,right,tag);
}
}
2.非递归的方式
/**
* 非递归的方法
* @param array 输入的数组
* @param left 最左边的索引
* @param right 最右边的索引
* @param tag 要查找的数
* @return 返回索引
*/
public static int binarySeachNotRecur(int array[],int left,int right,int tag) {
while(left>=right) {
int mid=(right+left)/2;
if(array[mid]==tag) {
return mid;
}else if(array[mid]>tag) {
//左边查找
right=mid-1;
}else {
//向右查找
left=mid+1;
}
}
return-1;
}