最近在复习基础知识,下面是二分查找算法的递归和非递归实现:
package sortandsearch;/** *@Description:二分查找的递归和非递归算法
*@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)); }}