一、概念
二分查找又称折半查找,它是一种效率较高的查找方法。
二、原理图:
三、代码
public class BinarySearch {
/**
* 二分查找算法
*
* @param srcArray 有序数组
* @param key 查找元素
* @return key的数组下标,没找到返回-1
*/
public static void main(String[] args) {
int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));
}
/**
* 使用递归的二分查找
*title:recursionBinarySearch
*@param arr 有序数组
*@param key 待查找关键字
*@return 找到的位置
*/
public static int recursionBinarySearch(int[] arr,int key,int low,int high){
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
int middle = (low + high) / 2; //初始中间位置
if(arr[middle] > key){
//比关键字大则关键字在左区域
return recursionBinarySearch(arr, key, low, middle - 1);
}else if(arr[middle] < key){
//比关键字小则关键字在右区域
return recursionBinarySearch(arr, key, middle + 1, high);
}else {
return middle;
}
}
// 二分查找普通循环实现
public static int binSearch(int[] arr, int key) {
int mid;
int low = 0;
int high = arr.length - 1;
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
while(high >= low){
mid = (low + high) / 2;
if(arr[mid]==key){
return mid;
}else if(arr[mid]<key){
low = mid + 1;
}else if(arr[mid]>key){
high = mid - 1;
}
}
return -1;
}
}
参考文章:
https://blog.csdn.net/maoyuanming0806/article/details/78176957