详解java中的二分查找并演示流程
二分查找(Binary Search)又称折半查找,它是一种在有序数组中查找特定元素的搜索算法。
二分查找的基本思路是:首先,确定要查找的范围,即将数组的中间元素与要查找的元素进行比较。如果中间元素等于要查找的元素,则查找成功;如果中间元素大于要查找的元素,则在左半边继续查找;如果中间元素小于要查找的元素,则在右半边继续查找。重复这个过程,直到找到要查找的元素或者确定要查找的范围为空。
下面是Java中的二分查找示例代码:
public class BinarySearch {
/**
* 二分查找
* @param arr 有序数组
* @param key 要查找的元素
* @return 返回元素的下标,如果找不到则返回-1
*/
public static int binarySearch(int[] arr, int key) {
int left = 0; // 左边界
int right = arr.length - 1; // 右边界
while (left <= right) {
int mid = (left + right) / 2; // 中间位置
if (arr[mid] == key) { // 找到了
return mid;
} else if (arr[mid] > key) { // 在左半边查找
right = mid - 1;
} else { // 在右半边查找
left = mid + 1;
}
}
return -1; // 没找到
}
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
int key = 5;
int index = binarySearch(arr, key);
if (index != -1) {
System.out.println("找到了,下标为:" + index);
} else {
System.out.println("没找到");
}
}
}
以上代码中,binarySearch方法接受一个有序数组和要查找的元素,返回元素的下标,如果找不到则返回-1。在方法中,使用left和right分别表示数组的左右边界,使用mid表示中间位置。在while循环中,不断更新left和right,并计算mid的值。如果找到了要查找的元素,就返回mid的值;如果mid的值大于要查找的元素,就在左半边继续查找;如果mid的值小于要查找的元素,就在右半边继续查找。最终,如果没有找到就返回-1。
下面我们来演示一下二分查找的流程:
假设有一个有序数组arr,其内容为{1, 3, 5, 7, 9},我们要查找元素5。初始时,left为0,right为4,mid为2,arr[mid]为5。
第一次循环:
arr[mid] == key,找到了,返回mid的值2。
演示结束
原文地址: https://www.cveoy.top/t/topic/cken 著作权归作者所有。请勿转载和采集!