非递归
int find(int[] arr, int target){
int l=0, r=arr.length-1;
while(l<=r){
int mid = (r-l)/2 + l;
if(arr[mid] == target) return mid;
if(arr[mid] > target) r = mid-1;
if(arr[mid] < target) l = mid+1;
}
return -1;
}
package com.algorithm.search;
public class BinarySearchNotRecursive {
private BinarySearchNotRecursive() {
}
public static int find(Integer[] arr, Integer target) {
int l = 0, r = arr.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid].compareTo(target) == 0) {
return mid;
}
if (arr[mid].compareTo(target) > 0) {
r = mid - 1;
} else if (arr[mid].compareTo(target) < 0) {
l = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
int N = 1000;
Integer[] arr = new Integer[N];
for (int i = 0; i < N; i++)
arr[i] = new Integer(i);
for (int i = 0; i < 2 * N; i++) {
int v = BinarySearchNotRecursive.find(arr, new Integer(i));
if (i < N) {
System.out.print(i);
System.out.println(v == i);
} else {
System.out.print(i);
System.out.println(v == -1);
}
}
return;
}
}
递归
int find(int[] arr, int target){
return find(arr, 0, arr.length-1, target);
}
int find(int[] arr, int l, int r, int target){
if( l > r) return -1;
int mid = (r-l)/2 + l;
if(arr[mid] == target) return mid;
else if(arr[mid] > target) return find(arr, l, mid—1, target);
else returnfind(arr, mid+1, r, target);
}
package com.algorithm.search;
public class BinarySearchRecursive {
private BinarySearchRecursive() {
}
public static int find(Integer[] arr, Integer target) {
return find(arr, 0, arr.length - 1, target);
}
private static int find(Integer[] arr, int l, int r, Integer target) {
if (l > r) return -1;
int mid = l + (r - l) / 2;
if (arr[mid].compareTo(target) > 0) {
return find(arr, l, mid - 1, target);
} else if (arr[mid].compareTo(target) < 0) {
return find(arr, mid + 1, r, target);
} else {
return mid;
}
}
public static void main(String[] args) {
int N = 1000;
Integer[] arr = new Integer[N];
for (int i = 0; i < N; i++)
arr[i] = new Integer(i);
for (int i = 0; i < 2 * N; i++) {
int v = BinarySearchRecursive.find(arr, new Integer(i));
if (i < N) {
System.out.print(i);
System.out.println(v == i);
} else {
System.out.print(i);
System.out.println(v == -1);
}
}
return;
}
}
![这里写图片描述](https://img-blog.csdn.net/20171113145936117?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGVhdERlYXRo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)