本周的任务是用Java实现二进制搜索 ,您需要编写迭代和递归二进制搜索算法 。 在计算机科学中,二进制搜索或半间隔搜索是一种分而治之的算法,用于定位项目在排序数组中的位置。 二进制搜索通过将输入值与数组的中间元素进行比较来工作。 比较确定元素是否等于输入,小于输入或大于输入。 当要比较的元素等于输入时,搜索将停止并通常返回该元素的位置。 如果元素不等于输入,则进行比较以确定输入是否小于或大于元素。 然后,根据算法的不同,算法重新开始,但仅搜索数组元素的顶部或底部子集。 如果输入不在数组内,则算法通常会输出一个唯一的值来表明这一点。
二进制搜索算法通常将每次连续迭代要检查的项目数量减半,从而在对数时间内定位给定的项目(或确定其不存在)。 二进制搜索是一种分而治之的搜索算法。 它通过将输入集分成两半然后应用算法并重复相同的步骤直到完成工作来工作。
Java中的二进制搜索实现
该算法是递归实现的。 另外,有关Java中的二进制搜索实现的一个有趣的事实是,著名的作者Joshua Bloch
有效的Java书籍在“ java.util.Arrays”中编写了二进制搜索。
import java.util.Arrays;
import java.util.Scanner;
/**
* Java program to implement Binary Search. We have implemented Iterative
* version of Binary Search Algorithm in Java
*
* @author Javin Paul
*/
public class IterativeBinarySearch {public static void main(String args[]) {int[] list = new int[]{23, 43, 31, 12};int number = 12;Arrays.sort(list);System.out.printf("Binary Search %d in integer array %s %n", number,Arrays.toString(list));binarySearch(list, 12);System.out.printf("Binary Search %d in integer array %s %n", 43, Arrays.toString(list));binarySearch(list, 43);list = new int[]{123, 243, 331, 1298};number = 331;Arrays.sort(list);System.out.printf("Binary Search %d in integer array %s %n", number, Arrays.toString(list));binarySearch(list, 331);System.out.printf("Binary Search %d in integer array %s %n", 331, Arrays.toString(list));binarySearch(list, 1333);// Using Core Java API and Collection framework// Precondition to the Arrays.binarySearchArrays.sort(list);// Search an elementint index = Arrays.binarySearch(list, 3);}/*** Perform a binary Search in Sorted Array in Java** @param input* @param number* @return location of element in array*/public static void binarySearch(int[] input, int number) {int first = 0;int last = input.length - 1;int middle = (first + last) / 2;while (first <= last) {if (input[middle] < number) {first = middle + 1;} else if (input[middle] == number) {System.out.printf(number + " found at location %d %n", middle);break;} else {last = middle - 1;}middle = (first + last) / 2;}if (first > last) {System.out.println(number + " is not present in the list.\n");}}
}Output
Binary Search 12 in integer array [12, 23, 31, 43]
12 found at location 0
Binary Search 43 in integer array [12, 23, 31, 43]
43 found at location 3
Binary Search 331 in integer array [123, 243, 331, 1298]
331 found at location 2
Binary Search 331 in integer array [123, 243, 331, 1298]
1333 is not present in the list.
这就是如何在Java中实现迭代二进制搜索的全部内容。
感谢您到目前为止阅读本文。 如果您喜欢这篇文章,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请留言。
翻译自: https://www.javacodegeeks.com/2018/06/binary-search-java-without-recursion.html