一、二分查找法
二分查找法,就是对一个有序数组
进行拆分。找到这个数组的中间的那个数的值,将查找的这个数与其比较。这里是从小到大排序的,如果比这个中间值小,就在把中间值左边看成一个数组,在这个数组里继续二分查找,直到查到(或者查完全部也没查到).
如果比这个中间值大,就在把中间值右边看成一个数组,在这个数组里继续二分查找,直到查到(或者查完全部也没查到).
代码实现
public class BinarySearchDemo {
public static void main(String[] args) {
int[] nums = new int[]{
1,2,3,4,5,6,7,8,9,10};
int resIndex = binarySearch(nums, 5, 0, nums.length - 1);
if (resIndex != -1){
System.out.println("查找的数字的下标:" + resIndex);
}else{
System.out.println("该数字在数组中不存在!");
}
}
/**
* 二分查找法 - 在有序数组里查找一个数
* @param nums 查找的数组
* @param findVal 要查找的值
* @param left 数组左端索引
* @param right 数组右端索引
* @return 查找到值的下标,没有查找到返回-1
*/
public static int binarySearch(int[] nums, int findVal, int left, int right){
if (left > right){
// 找遍整个数组,未发现该数
return -1;
}
int mid = (left + right) / 2; // 中间索引
int midVal = nums[mid]; // 数组最中间的值
if (findVal < midVal){
// 在右边查询