版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/danielzhou888/article/details/83793634
@(算法)
二分查找
欢迎关注作者博客
简书传送门
思想:
又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
代码:
/**
* @program:
* @description: 二分查找
* @author: zhouzhixiang
* @create: 2018-11-06 20:08
*/
public class BinSearch {
/**
* 二分查找普通实现
* @param array
* @param key
* @return
*/
public static int binSearch(int array[], int key){
int mid;
int start = 0;
int end = array.length - 1;
while (start < end) {
mid = (end - start)/2 + start;
if (array[mid] > key){
end = mid - 1;
} else if(array[mid] < key){
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
/**
* 二分查找递归实现
* @param array
* @param key
* @return
*/
public static int binSearch2(int array[], int key, int start, int end){
int mid = (start + end) / 2;
while (start < end) {
if(array[mid] > key) return binSearch2(array,key,start,mid-1);
else if (array[mid] < key) return binSearch2(array,key,mid+1,end);
else return mid;
}
return -1;
}
}
欢迎加入Java猿社区