Búsqueda binaria de una string

Dada una array ordenada de strings y una string x, encuentre un índice de x si está presente en la array.

Ejemplos:

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. 

Prerrequisitos: búsqueda binaria , comparación de strings en Java
La idea es comparar x con la string del medio en la array dada. Si coincide, devuelva mid, de lo contrario, si es más pequeño que mid, busque en la mitad izquierda, de lo contrario busque en la mitad derecha. 

C++

// 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

// Java program to implement Binary Search for strings
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)
            System.out.println("Element not present");
        else
            System.out.println("Element found at "
                              + "index " + result);
    }
}

Python3

# Python3 program to implement Binary
# Search for strings
 
# Returns index of x if it is present
# in arr[], else return -1
def 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 Code
if __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#

// 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
// PHP program to implement Binary
// Search for strings
 
// Returns index of x if it is present
// in arr[], else return -1
function 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
?>

Javascript

<script>
// Javascript program to implement Binary Search for strings
 
// Returns index of x if it is present in arr[],
// else return -1
function 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 above
let 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>
Producción: 

Element found at index 2

 

Publicación traducida automáticamente

Artículo escrito por SamuelAntwi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *