注:折半查找只能运用于已排好序的数组,对于没有进行大小排序的数组无效
public class BinarySearch {
public static void main(String[] args) {
int[] nums = {1,2,3,34,56,245,643,765,4453};
int i = binarySearch2(nums,643);
System.out.println(i);
}
/**
* 这个比下面的折半查找是优化了些的
*/
public static int binarySearch(int[] nums,int target){
// 定义边界
int left = 0;
int right = nums.length - 1;
int middle = -1;
// 处理边界
if (target < nums[left] || target > nums[right]){
return -1;
}
// 左边小于右边就进入while循环
while (left < right){
middle = (left + right) / 2;
if (nums[middle] > target){
right = middle - 1;
}else {
left = middle + 1;
}
if (nums[middle] == target){
return middle;
}
}
return middle;
}
public static int binarySearch2(int[] nums,int target){
// 定义边界
int left = 0;
int right = nums.length - 1;
int middle = (left + right) / 2;
// 处理边界
if (target < nums[left] || target > nums[right]){
return -1;
}
if ( target == nums[left]){
return 0;
}
if (target == nums[right]){
return right;
}
// middle在中间,还没找见
while (middle < right && middle > left && nums[middle] != target){
if (nums[middle] > target){
right = middle;
}else {
left = middle;
}
middle = (left + right) / 2;
}
if (middle == right || middle == left){
return -1;
}
return middle;
}
}