Find sequential search and binary
Sequential search
private static int search(int[] arr, int key) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key)
return i;
}
return -1;
}
Ordinary binary search solution
private static int binarySearch0(int[] arr, int low, int high, int key) {
while (low <= high) {
int mid = low + ((high - low) >> 1);
int midVal = arr[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid;
}
return -(low + 1);
}
Binary search recursive solution
public class 二分查找的递归解法 {
public static void main(String[] args) {
int a[] = {1,9,3,6,8,5,8};
System.out.println(binarySearch(a, 0, 6, 3));
}
private static int binarySearch(int[] arr, int low, int high, int key){
if (low > high) {
return -1;
}
int mid = low + ((high - low)>>1) ;
int midVal = arr[mid];
if (midVal < key) {
return binarySearch(arr, mid + 1, high, key);
}
else if (midVal > key) {
return binarySearch(arr, low, high - 1, key);
}
else {
return mid;
}
}
}
analysis
全范围内二分查找
等价于三个子问题:
左边找(递归)
中间比
右边找(递归)
注意:左查找和右查找只选其一