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

二分查找的原理及代码实现

2017-07-11 20:00 316 查看
二分查找算法的原理就是基于一个有序表进行查找;首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

优点:

时间复杂度虽然低,为O(log n)

查找次数少,查找速度快

缺点:

只能是基于有序结构去查询

具体代码(java)实现如下:

public class TestDemo1 {

/******************非递归的二分查找**************************/
public static boolean TPFind(int arr[], int length, int num){
assert(null != arr);

boolean res = false;
int start = 0, end = length -1;
while(start <= end){
int midd = (start + end) >> 1;
if(num == arr[midd]){
res = true;
break;
}else if(num < arr[midd]){
end = midd -1;
}else if(num > arr[midd]){
start = midd + 1;
}
}
return res;
}

/******************递归二分查找***************************/
public static boolean TPFind1(int arr[], int start, int end, int num){
assert(null != arr);

boolean res = false;
if(start <= end){
int midd = (start + end) >> 1;
if(num == arr[midd]){
res = true;
}else if(arr[midd] > num){
return TPFind1(arr,start,midd-1,num);
}else{
return TPFind1(arr,midd+1,end,num);
}
}
return res;
}

public static void main(String[] argv){
int arr[] = {12,23,34,45,56,67,78,89};
boolean p = TPFind1(arr, 0, arr.length - 1, 78);
System.out.println(p);
}

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