7-1二分查找
二分查找
基本思想

一半一半 逐渐逼近
思路
二分查找的思路分析
-
首先确定该数组的中间的下标
mid= (left + right)/ 2 -
然后让需要查找的数findVal和arr[mid]比较
2.1 findVal>arr[mid], 说明你要查找的数在mid的右边,因此需要递归的向右查找
2.2 findVal <arr[mid],说明你要查找的数在mid的左边,因此需要递归的向左查找
2.3 findVal == arr[mid]说明找到,就返回
//什么时候我们需要结束递归.
1)找到就结束递归
2)递归完整个数组,仍然没有找到findVal,也需要结束递归
实现代码
迭代方式
package com.company.search;
/**
* @Function :
* date 2021/5/17 - 13:20
* How :
*/
public class BinSearch {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
int index = binSearch(arr, 8)+1;
System.out.println(index);
}
public static int binSearch(int srcArray[], int key) {
int mid;
int start = 0;
int end = srcArray.length - 1;
while (start <= end) {
mid = (end - start) / 2 + start;
if (key == srcArray[mid]){
return mid;
}
if (key < srcArray[mid]) {
end = mid - 1;
}
if (key > srcArray[mid]) {
start = mid + 1;
}
}
return -1;
}
}
递归方式
public static int binSearch2(int [] arr, int key,int start,int end){
int mid = (end - start) / 2 + start;
if (key==arr[mid]){
return mid+1;
}
if (key < arr[mid]) {
return binSearch2(arr,key,start,mid-1);
}
if (key > arr[mid]) {
return binSearch2(arr,key,start+1,end);
}
return -1;
}
后记
没有处理越界情况

浙公网安备 33010602011771号