二分查找的变形问题

代码
package com.athome.search;public class BinarySearchDemo {public static void main(String[] args) {int[] arr ={1,3,4,5,6,8,8,8,11,18};int index1 = bsearch1(arr, arr.length, 8);int index2 = bsearch2(arr, arr.length, 8);int index3 = bsearch1(arr, arr.length, 11);int index4 = bsearch1(arr, arr.length, 6);System.out.println(index1);System.out.println(index2);System.out.println(index3);System.out.println(index4);}public static int bsearch1(int[] a, int n, int value) {int low = 0;int high = n - 1;while (low <= high) {int mid = low + ((high - low) >> 1);if (a[mid] > value) {high = mid - 1;} else if (a[mid] < value) {low = mid + 1;} else {if ((mid == 0) || (a[mid - 1] != value)) return mid;else high = mid - 1;}}return -1;}public static int bsearch2(int[] a, int n, int value) {int low = 0;int high = n - 1;while (low <= high) {int mid = low + ((high - low) >> 1);if (a[mid] > value) {high = mid - 1;} else if (a[mid] < value) {low = mid + 1;} else {if ((mid == n - 1) || (a[mid + 1] != value)) return mid;else low = mid + 1;}}return -1;}public static int bsearch3(int[] a, int n, int value) {int low = 0;int high = n - 1;while (low <= high) {int mid = low + ((high - low) >> 1);if (a[mid] >= value) {if ((mid == 0) || (a[mid - 1] < value)) return mid;else high = mid - 1;} else {low = mid + 1;}}return -1;}public static int bsearch4(int[] a, int n, int value) {int low = 0;int high = n - 1;while (low <= high) {int mid = low + ((high - low) >> 1);if (a[mid] > value) {high = mid - 1;} else {if ((mid == n - 1) || (a[mid + 1] > value)) return mid;else low = mid + 1;}}return -1;}}