算法思想
一、循环
package com.sy.BinSearch;
public class BinSearch {
public static void main(String[] args) {
int[] array = new int[] {8,17,19,37,40,73,79,82,87,95,97,98};
int target = 95;
int index = binarySearch(array, target);
System.out.println(index);
}
private static int binarySearch(int[] array, int target) {
int low = 0;
int high = array.length - 1;
int mid = (low + high) / 2;
while (low <= high) {
if (target == array[mid]) {
return mid;
}
if (target > array[mid]) {
low = mid +1;
} else if (target < array[mid]) {
high = mid - 1;
}
mid = (low + high) / 2;
}
return -1;
}
}
二、递归
package com.sy.BinSearch;
public class BinSearch_recursion {
public static void main(String[] args) {
int[] array = new int[] {8,17,19,37,40,73,79,82,87,95,97,98};
int target = 95;
int low = 0;
int high = array.length - 1;
int index = binarySearch(array, target, low, high);
System.out.println(index);
}
private static int binarySearch(int[] array, int target, int low, int high) {
System.out.println("low: " + low);
System.out.println("high: " + high);
if (low > high) {
return -1;
}
int mid = (low + high) / 2;
if (target > array[mid]) {
return binarySearch(array, target, mid + 1, high);
} else if (target < array[mid]) {
return binarySearch(array, target, low, mid - 1);
} else {
return mid;
}
}
}