文章目录
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
看图:
- 将左指针指向数组的第一个,右指针指向数组的最后一个
- 将要寻找和要插入的值和左指针和右指针中间的值作比较
- 如果中间的值大于目标值,说明目标值在中间的值的左边,让右指针指向中间指针的左边一位
- 如果中间的值小于目标值,说明目标值在中间的值的右边,让左指针指向中间指针的右边一位
- 重复进行,知道找到目标值,或者l左指针大于右指针
二分查找Java代码
基本解法
public static int searchInsert3(int[] nums,int target){
//数组的长度
int n = nums.length;
//左右指针
int left =0;
int right = n-1;
//当左指针大于右指针跳出循环
while (left<=right){
//确定中间指针
int mid = (left+right)/2;
//比较中值和目标值
if (nums[mid]>target){
right = mid-1;
}else if(nums[mid]<target){
left =mid+1;
}else {
//找到返回索引
return mid;
}
}
//返回需要插入的为止
return left;
}
递归
public static int searchInsert1(int[] nums , int target,int left ,int right){
//终止条件
if (left>right){
return left;
}
//找到中间的索引
int mid = (left+right)/2;
//中间的值
int midValue = nums[mid];
//如果中间的值大于目标值,则向左查找
if (midValue>target){
return searchInsert1(nums,target,left,mid-1);
}else if (midValue<target){
//否则向右查找
return searchInsert1(nums,target,mid+1,right);
}else {
//相等直接返回
return mid;
}
}