在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