二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列
过程:首先,假设表中元素是按升序排列,将target与表中元素中间数值进行比较,如果nums[mid]==target,则mid就是需要查找的数,如果nums[mid]<traget,将mid+1赋值给left,如果nums[mid]>traget,将mid-1赋值给right,没找到则返回-1.
非递归实现:
int binarySearch(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right) {
int mid = (right + left) / 2;
if(nums[mid] == target)
return mid;
else if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid - 1;
}
return -1;
}
递归实现:
int binarySearch(int[] nums, int target,int start,int end) {
int left = 0;
int right = nums.length - 1;
while(left <= right) {
int mid = (right + left) / 2;
if(nums[mid] == target)
return mid;
else if (nums[mid] < target)
return binarySearch(nums,target,mid+1,right)
else if (nums[mid] > target)
return binarySearch(nums,target,left,mid-1)
}
return -1;
}