/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.luni.util; public class BinarySearch { /** * Search the sorted characters in the string and return an exact index or * -1. * * @param data * the String to search * @param value * the character to search for * @return the matching index, or -1 */ public static int binarySearch(String data, char value) { int low = 0, high = data.length() - 1; while (low <= high) { int mid = (low + high) >> 1; char target = data.charAt(mid); if (value == target) return mid; else if (value < target) high = mid - 1; else low = mid + 1; } return -1; } /** * Search the sorted characters in the string and return the nearest index. * * @param data * the String to search * @param c * the character to search for * @return the nearest index */ public static int binarySearchRange(String data, char c) { char value = 0; int low = 0, mid = -1, high = data.length() - 1; while (low <= high) { mid = (low + high) >> 1; value = data.charAt(mid); if (c > value) low = mid + 1; else if (c == value) return mid; else high = mid - 1; } return mid - (c < value ? 1 : 0); } }