在Java中搜索二进制搜索

时间:2020-02-23 14:41:14  来源:igfitidea点击:

在本教程中,我们将看到如何使用划分和征服方法在Java中执行二进制搜索。
当要在排序阵列中找到值时,我们使用二进制搜索,我们还将看到如何计算二进制搜索的时间复杂性。

让我们说我们有一个排序的阵列。

算法:

  • 初始化first = 0且last = sortedArray.length-1
  • 计算中间并比较有关要搜索的元素的SortedArray [Mid]
  • 如果要搜索的元素少于SortedArray [Mid],则元素位于中期的左侧,因此最后= 1
  • 如果要搜索的元素大于SortedArray [Mid],则元素位于中期的右侧部分,因此首先= Mid + 1.
  • 如果要搜索的元素等于SortedArray [Mid],则返回索引
  • 重复上述过程,直到第一个小于最后一个。
public  static int binarySearch(int[] sortedArray, int elementToBeSearched) {
		int first = 0;
		int last = sortedArray.length - 1;
 
		while (first <= last) {
 
			int mid = (first + last)/2;  //Compute mid point.
 
			if (elementToBeSearched < sortedArray[mid]) {
				last = mid-1;     //repeat search in first half.
			} else if (elementToBeSearched > sortedArray[mid]) {
				first = mid + 1;  //Repeat sortedArray in last half.
			} else {
				return mid;     //Found it. return position
			}
		}
 
		return -1;    //Failed to find element
	}

示例:现在让我们假设我们的排序数组是:

int[] sortedArray={12,56,74,96,112,114,123,567};

我们希望在上面的阵列中搜索74.
下图将解释二进制搜索如何在此处工作。

当我们仔细观察时,在每个迭代中,我们将阵列的范围切割到一半。
在每次迭代中,我们都是根据SortedArray [Mid]的第一个或者最后一个的值。
所以对于第0次迭代:第1第1次迭代:N/2第2次迭代N/4第3次迭代N/8.
上面的等式概括:对于ITH迭代:N/2I

如此迭代将结束,当我们有1个元素左侧:对于任何我,这将是我们的最后一次迭代:1 = n/2i; 2i = n;拍日志后i = log(n);所以它得出结论,迭代的数量需要做二进制搜索是log(n)所以二进制搜索的复杂性是log(n)它是如图所示,我们有n为8.

它需要3个迭代(8-> 4-> 2-> 1),3是log(8)。
代码:

package org.arpit.theitroad;
 
public class BinarySerarchMain {
 
	public  static int binarySearch(int[] sortedArray, int elementToBeSearched) {
		int first = 0;
		int last = sortedArray.length - 1;
 
		while (first <= last) {
 
			int mid = (first + last)/2;  //Compute mid point.
 
			if (elementToBeSearched < sortedArray[mid]) {
				last = mid-1;     //repeat search in first half.
			} else if (elementToBeSearched > sortedArray[mid]) {
				first = mid + 1;  //Repeat sortedArray in last half.
			} else {
				return mid;     //Found it. return position
			}
		}
 
		return -1;    //Failed to find element
	}
 
	public static void main(String[] args)
	{
 
		int[] sortedArray={12,56,74,96,112,114,123,567};
		int indexOfElementToBeSearched=binarySearch(sortedArray,74);
		System.out.println("Index of 74 in array is: " +indexOfElementToBeSearched);
 
		int indexOfElementToBeSearchedNotFound=binarySearch(sortedArray,7);
		System.out.println("Index of 7 in array is: " +indexOfElementToBeSearchedNotFound);
	}
 
}

运行上面的程序时,我们将得到以下输出:

Index of 74 in array is: 2
Index of 7 in array is: -1