二分查找
前提条件
我们的二分查找必须是在有序数组中查找
无论是从小到大还是从大到小
题目
请对一个有序数组进行二分查找{1, 8,10,89,1000,1234},输入一个数
看看该数组是否在此数,姐出下标,如果没有就提示没有这个数”。
思路
我们这次的二分查找会用到递归的思想,当然也有非递归的方式,我是分开来学习了
1.首先确定数组的中间下标mid mid = (left+ right)/2
2.让需要查找的数findValue和我们的arr[mid]比较
如果findValue>arr[mid],往右边递归找
如果findValue<arr[mid],向左边递归查找
如果正好找到就返回
那我们的递归出口(结束条件)是什么
1.找到了,直接返回退出了
2.递归万整个数组,没有找到findValue,也需要结束递归时,当我们的left>right就代表要结束了
代码
//二分查找
//@author 王
public class BinarySearch {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = {
1,8,10,89,1000,1234};//必须是有序数组
int resultIndex = binarySearch(arr, 0, arr.length -1, 1234);
System.out.println(resultIndex);
}
/**
*
* @param arr 数组
* @param left 左边索引
* @param right 右边索引
* @param findValue 需要找的数字,找到返回下标,未找到返回-1
* @return
*/
//二分查找算法
public static int binarySearch(int[] arr,int left,int right,int findValue) {
int mid = (left+right)/2;
int midValue = arr[mid];
if(findValue >midValue){
//向右递归
return binarySearch(arr, mid