Binary Search a String - GeeksforGeeks

28 Jun, 2021
Given a sorted array of Strings and a String x, find an index of x if it is present in the array.
Examples:
Input :  arr[] = {"contribute", "geeks", "ide", "practice"}, x = "ide"
Output :  2
The String x is present at index 2.

Input :  arr[] = {"contribute", "geeks", "ide", "practice"}, x = "zz"
Output :  -1
The String "zz" is not present. 
Prerequisites: Binary Search, String Comparison in JavaThe idea is to compare x with the middle string in the given array. If it matches, then return mid, else if it is smaller than mid, then search in the left half, else search in the right half. 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to implement Binary Search for strings#include<bits/stdc++.h>using namespace std;     // Returns index of x if it is present in arr[],    // else return -1    int binarySearch(string arr[], string x,int n)    {        int l = 0 ;        int r = n - 1;        while (l <= r)        {            int m = l + (r - l) / 2;         int res = -1000;   //some random value assigned because if res is already 0 then                             //it will always return 0            if (x == (arr[m]))            res = 0;                          // Check if x is present at mid            if (res == 0)                return m;             // If x greater, ignore left half            if (x > (arr[m]))                l = m + 1;             // If x is smaller, ignore right half            else                r = m - 1;        }         return -1;    }     // Driver code    int main()    {        string arr[] = { "contribute", "geeks", "ide", "practice"};        string x = "ide";        int n = 4;        int result = binarySearch(arr, x,n);         if (result == -1)            cout << ("Element not present");        else            cout << ("Element found at index ") << result;    }     // This code is contributed by// Shashank_Sharma
// Java program to implement Binary Search for stringsclass GFG {     // Returns index of x if it is present in arr[],    // else return -1    static int binarySearch(String[] arr, String x)    {        int l = 0, r = arr.length - 1;        while (l <= r) {            int m = l + (r - l) / 2;             int res = x.compareTo(arr[m]);             // Check if x is present at mid            if (res == 0)                return m;             // If x greater, ignore left half            if (res > 0)                l = m + 1;             // If x is smaller, ignore right half            else                r = m - 1;        }         return -1;    }     // Driver method to test above    public static void main(String []args)    {        String[] arr = { "contribute", "geeks", "ide", "practice"};        String x = "ide";        int result = binarySearch(arr, x);         if (result == -1)            System.out.println("Element not present");        else            System.out.println("Element found at "                              + "index " + result);    }}
# Python3 program to implement Binary# Search for strings # Returns index of x if it is present# in arr[], else return -1def binarySearch(arr, x):    l = 0    r = len(arr)    while (l <= r):        m = l + ((r - l) // 2)         res = (x == arr[m])         # Check if x is present at mid        if (res == 0):            return m - 1         # If x greater, ignore left half        if (res > 0):            l = m + 1         # If x is smaller, ignore right half        else:            r = m - 1     return -1 # Driver Codeif __name__ == "__main__":     arr = ["contribute", "geeks",               "ide", "practice"];    x = "ide"    result = binarySearch(arr, x)     if (result == -1):        print("Element not present")    else:        print("Element found at index" ,                                 result) # This code is contributed by ita_c
// C# program to implement Binary Search for strings using System; class GFG {     // Returns index of x if it is present in arr[],    // else return -1    static int binarySearch(String[] arr, String x)    {        int l = 0, r = arr.Length - 1;        while (l <= r) {            int m = l + (r - l) / 2;             int res = x.CompareTo(arr[m]);             // Check if x is present at mid            if (res == 0)                return m;             // If x greater, ignore left half            if (res > 0)                l = m + 1;             // If x is smaller, ignore right half            else                r = m - 1;        }         return -1;    }     // Driver method to test above    public static void Main(String []args)    {        String[] arr = { "contribute", "geeks", "ide", "practice"};        String x = "ide";        int result = binarySearch(arr, x);         if (result == -1)            Console.WriteLine("Element not present");        else            Console.WriteLine("Element found at "                            + "index " + result);    }// This code is contributed by Ryuga}
<?php// PHP program to implement Binary// Search for strings // Returns index of x if it is present// in arr[], else return -1function binarySearch($arr, $x){    $l = 0;    $r = count($arr);    while ($l <= $r)    {        $m = $l + (int)(($r - $l) / 2);         $res = strcmp($x, $arr[$m]);         // Check if x is present at mid        if ($res == 0)            return $m - 1;         // If x greater, ignore left half        if ($res > 0)            $l = $m + 1;         // If x is smaller, ignore right half        else            $r = $m - 1;    }     return -1;} // Driver Code$arr = array("contribute", "geeks",                "ide", "practice");$x = "ide";$result = binarySearch($arr, $x); if ($result == -1)    print("Element not present");else    print("Element found at index " .                            $result); // This code is contributed by mits?>
<script>// Javascript program to implement Binary Search for strings // Returns index of x if it is present in arr[],// else return -1function binarySearch(arr,x){    let l = 0, r = arr.length - 1;        while (l <= r) {            let m = l + Math.floor((r - l) / 2);               let res = x.localeCompare(arr[m]);                           // Check if x is present at mid            if (res == 0)                return m;               // If x greater, ignore left half            if (res > 0)                l = m + 1;               // If x is smaller, ignore right half            else                r = m - 1;        }           return -1;} // Driver method to test abovelet arr=["contribute", "geeks", "ide", "practice"];let x = "ide";let result = binarySearch(arr, x);if (result == -1)    document.write("Element not present<br>");else    document.write("Element found at "                   + "index " + result+"<br>");               // This code is contributed by rag2127</script>
Element found at index 2
 
ankthon
Mithun Kumar
ukasp
Shashank_Sharma
hsamara74
rag2127
panurag329
Binary Search
Java-Strings
Java Programs
Strings
Java-Strings
Strings
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Iterate HashMap in Java?
Iterate through List in Java
Factory method design pattern in Java
Java Program to Remove Duplicate Elements From the Array
Java program to count the occurrence of each character in a string using Hashmap
Write a program to reverse an array or string
Reverse a string in Java
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types