@Test
public void testBinarySearch() {
int[] arr = { 1, 2, 3, 4, 5 };
// 非递归实现,返回对应的序号
System.out.println(BinarySearch(arr, 5));
// 递归实现,返回对应的序号
System.out.println(BinSearch(arr, 5));
}
/**
* 非递归实现,返回对应的序号
*
* @author: kpchen
* @createTime: 2015年1月6日 下午8:21:55
* @history:
* @param arr
* 数组
* @param key
* 查找数
* @return int 返回位置
*/
int BinarySearch(int[] arr, int key) {
if (arr == null || arr.length < 1) {
return -1;
}
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (key == arr[mid]) {
return mid;
} else if (key < arr[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
/*
* 递归实现,返回对应的序号
*/
int BSearch(int[] arr, int low, int high, int key) {
if (arr == null || low > high) {
return -1;
}
int mid = (low + high) >> 1;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
return BSearch(arr, low, mid - 1, key);
} else {
return BSearch(arr, mid + 1, high, key);
}
}
/*
* 将递归实现的方法封装起来
*/
int BinSearch(int[] arr, int key) {
return BSearch(arr, 0, arr.length - 1, key);
}
二分查找(递归与非递归方式)
最新推荐文章于 2023-10-19 20:15:26 发布