二分查找算法小结

2017-03-30  本文已影响0人  吴振宇

▼ 简介

二分查找是指已知有序队列中找出与给定关键字相同的数的具体位置。

▼ 原理

分别定义三个指针low、high、mid,分别指向待查元素所在范围的下界和上界及区间的中间位置,即mid=(low+high)/2,让关键字与mid所指的数比较,若相等则查找成功并返回mid,若关键字小于mid所指的数则high=mid-1,否则low=mid+1,然后继续循环直到找到或找不到为止。

▼ 代码实现

●递归

<pre>

public int recursionSearch(int []array,int value,int low,int high){
if(low<=high){
int mid=(low+high)/2;
if(value==array[mid]){
return mid;
}else if(value<array[mid]){
return recursionSearch(array,value,low,mid-1);
}else if(value>array[mid]){
return recursionSearch(array,value,mid+1,high);
}
}
return -1;
}

</pre>

●非递归

<pre>

public int norecursionSearch(int []array,int value){
int low=0;
int high=array.length-1;
int mid;
while(low<=high){
mid=(low+high)/2;
if(value==array[mid]){
return mid;
}else if(value<array[mid]){
high=mid-1;
}else if(value>array[mid]){
low=mid+1;
}

    }
    return -1;
}

</pre>

▼ 时间复杂度

总共有n个元素

每次查找的区间大小就是n,n/2,n/4,…,n/2^k

k是循环的次数。

n/2k取整后>=1,令n/2k=1,

可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)

参考书籍:《数据结构与算法》

上一篇下一篇

猜你喜欢

热点阅读