什么是Java中的二进制搜索?如何实施?
时间:2020-02-23 14:33:57 来源:igfitidea点击:
搜索和排序算法是任何编程语言中流行的算法。
它们是理解编程基础的基础。
一种这样流行的搜索算法是Java中的Binary Search。
在本文中,我将向大家介绍其实现。
什么是二进制搜索?
Java中的Binary Search是一种搜索算法,用于查找目标值在排序数组中的位置。
Binary search将目标值与数组的中间元素进行比较。
它仅适用于一组排序的元素。
要对集合使用二进制搜索,必须首先对集合进行排序。
当二进制搜索用于对排序集执行操作时,始终可以根据要搜索的值来减少迭代次数。
我们可以在上面的快照中找到中间元素。
二进制搜索的类比是使用对数组排序的信息,并将时间复杂度降低到O(log n)。
实现二进制搜索算法
让我们看一下下面的伪代码,以更好地理解它。
Procedure binary_search A ← sorted array n ← size of array x ← value to be searched Set low = 1 Set high = n while x not found if high < low EXIT: x does not exist. set mid = low + ( high - low )/2 if A[mid] < x set low = mid + 1 if A[mid]> x set high = mid - 1 if A[mid] = x EXIT: x found at location mid end while end procedure
解释:
步骤1:首先,将x与中间元素进行比较。
步骤2:如果x与中间元素匹配,则必须返回中间索引。
步骤3:否则,如果x大于中间元素,则x只能位于中间元素之后的右侧半个数组中。
因此,我们再次出现右半部分。
步骤4:否则,如果(x较小),则在左半部分再次出现。
这就是我们需要在给定数组中搜索元素的方式。
现在,让我们看看如何递归实现二进制搜索算法。
下面的程序演示了相同的内容。
递归二进制搜索
public class BinarySearch { //Java implementation of recursive Binary Search //Returns index of x if it is present in arr[l..h], else return -1 int binarySearch(int a[], int l, int h, int x) { if (h >= l) { int mid = l + (h - l)/2; //If the element is present at the middle itself if (a[mid] == x) return mid; //If element is smaller than mid, then it can only be present in left subarray if (a[mid] >x) return binarySearch(arr, l, mid - 1, x); //Else the element can only be present in right subarray return binarySearch(arr, mid + 1, h, x); } //We reach here when element is not present in array return -1; } public static void main(String args[]) { BinarySearch ob = new BinarySearch(); int a[] = { 20, 30, 40, 10, 50 }; int n = a.length; int x = 40; int res = ob.binarySearch(a, 0, n - 1, x); if (res == -1) System.out.println("Element not present"); else System.out.println("Element found at index " + res); } }
执行上述程序时,它将找到存在于特定索引处的元素
Element found at index 2