/* * Chimomo's Blog: https://blog.csdn.net/chimomo/ */ package chimomo.learning.java.algorithm.search; /** * * @author Chimomo * * The prerequisite of binary search: * <li> * 1. The searched sequence must be sequential stored. * </li> * <li> * 2. The searched sequence must be sorted by keyword. * </li> */ public class BinarySearch { /** * Recursively binary search x in sorted array a with low subscript lower * bound and high subscript upper bound. * * Time complexity is O(log2n). * * @param a The array to be searched * @param x The searched target * @param low The subscript lower bound of array a * @param high The subscript upper bound of array a * @return The subscript of x in the array a if found, -1 otherwise. */ public static int searchRecursively(int[] a, int x, int low, int high) { // Not found. if (low > high) { return -1; } int mid = (low + high) >> 1; if (x == a[mid]) { return mid; } return x < a[mid] ? searchRecursively(a, x, low, mid - 1) : searchRecursively(a, x, mid + 1, high); } /** * Circularly binary search x in sorted array a. * * Time complexity is O(log2n). * * @param a The array to be searched * @param x The searched target * @return The subscript of x in the array a if found, -1 otherwise. */ public static int searchCircularly(int[] a, int x) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = (low + high) >> 1; if (a[mid] == x) { return mid; } if (a[mid] < x) { low = mid + 1; } else { high = mid - 1; } } return -1; } }
算法 - 折半查找(Java)
猜你喜欢
转载自blog.csdn.net/chimomo/article/details/80404639
今日推荐
周排行