二分查找
经过尚硅谷韩顺平老师的视频讲解 总结下来的笔记
有序数组!!!
二分查找:
请对一个有序数组进行二分查找{1,8,10,89,1000,1234]},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数”。
二分查找的思路分析Ⅰ
1.首先确定该数组的中间的下标mid= (left+right) / 2
2.然后让需要查找的数findval和arr[mid]比较
---- findval > arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找
---- findval<arr[mid],说明你要查找的数在mid的左边,因此需要递归的向左查找
---- findVal ==arr[mid]说明找到,就返回
//什么时候我们需要结束递归.
1)找到就结束递归
2)递归完整个数组,仍然没有找到findval ,也需要结束递归当left>right就需要退出
package com.zhangan.search;
/**
* 二分查找
* 前提该数组有序
*/
public class BinarySearch {
//二分查找
/**
* @param arr 数组
* @param left 左边的索引
* @param right 右边的索引
* @param findVal 要查找的值
* @return 找到的下标 没找到返回-1
*/
public static int binarySearch(int[] arr, int left, int right, int findVal) {
//当left>right 说明没找到
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
int midVal = arr[mid];
if (findVal > midVal) {//向右递归
return binarySearch(arr, mid + 1, right, findVal);
} else if (findVal < midVal) {
return binarySearch(arr, left, mid - 1, findVal);
} else {
return mid;
}
}
public static void main(String[] args) {
int[] arr = {1, 8, 10, 89, 1000, 1234};
int resIndex = binarySearch(arr, 0, arr.length - 1, 1234);
if (resIndex == -1) {
System.out.println("没有找到");
} else {
System.out.println("找到了! 为:arr[" + resIndex + "]");
}
}
}