您的位置:首页 > 其它

二分查找的递归和非递归实现

2016-03-03 11:03 381 查看
最近在复习基础知识,下面是二分查找算法的递归和非递归实现:

package sortandsearch;

/**
*@Description:<p>二分查找的递归和非递归算法</p>
*@author 王旭
*@time 2016-3-3 上午10:36:29
*/
public class BinarySearch {

//非递归
public static int binSearch1(int[] arr, int target) {
if(arr == null || arr.length == 0)
return -1;
int left = 0, right = arr.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(arr[mid] == target) {
return mid;
}
if(arr[mid] < target) {
left = mid + 1;
}
if(arr[mid] > target) {
right = mid - 1;
}
}
return -1;
}

//递归
public static int binSearch2(int[] arr, int target, int left, int right) {
if(arr == null || arr.length == 0)
return -1;
if(left > right) {
return -1;
}
int mid = (left + right) / 2;
if(arr[mid] == target) {
return mid;
}
if(arr[mid] > target) {
return binSearch2(arr, target, left, right - 1);
}
if(arr[mid] < target) {
return binSearch2(arr, target, left + 1, right);
}
return -1;
}

public static void main(String[] args) {
int[] testArr = new int[]{1,2,3,5,8,9,12,13,15,19,20,30,50,89,101};
System.out.println(binSearch1(testArr, 13));
System.out.println(binSearch2(testArr, 101, 0, 14));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: