二分查找算法的两种形式(递归和非递归)
代码如下:
package com.chen.algorithm;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1, 3, 6, 8, 9};
System.out.println("使用非递归的二分查找算法");
System.out.println(binarySearchNoCursion(arr, 3));
System.out.println("使用递归的二分查找算法");
System.out.println(binarySearchCursion(arr,8,0,arr.length));
}
//非递归的二分查找算法
public static int binarySearchNoCursion(int[] arr, int index) {
int left = 0;
int right = arr.length;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == index) {
return mid;
} else if (arr[mid] < index) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
//非递归
public static int binarySearchCursion(int[] arr, int index, int left, int right) {
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == index) {
return mid;
} else if (arr[mid] > index) {
return binarySearchCursion(arr, index, left, mid - 1);
} else {
return binarySearchCursion(arr, index, mid + 1, right);
}
}
return -1;
}
}