什么是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