C# | Array.BinarySearch(Array, Int32, Int32, Object, IComparer) Método

Este método busca un elemento que se encuentra en una array ordenada unidimensional dentro de un rango de elementos mediante una interfaz IComparer especificada.

Sintaxis:

public static int BinarySearch (Array arr, int index, int length, Object value, IComparer comparer)

Parámetros:

  • arr : la array unidimensional ordenada que se va a buscar.
  • index : El índice inicial del rango desde el cual comenzará la búsqueda.
  • length : La longitud del rango en el que ocurrirá la búsqueda.
  • valor : El objeto a buscar.
  • comparer : al comparar elementos, utilice la implementación de IComparer .

Valor devuelto: Devuelve el índice del valor especificado en la array especificada si se encuentra el valor ; de lo contrario, devuelve un número negativo. Hay diferentes casos de valores de retorno de la siguiente manera:

  • Si no se encuentra el valor y el valor es menor que uno o más elementos de la array , el número negativo devuelto es el complemento bit a bit del índice del primer elemento que es mayor que el valor .
  • Si no se encuentra el valor y el valor es mayor que todos los elementos de la array, el número negativo devuelto es el complemento bit a bit de (el índice del último elemento más 1).
  • Si se llama a este método con una array no ordenada, el valor devuelto puede ser incorrecto y se puede devolver un número negativo, incluso si el valor está presente en la array.

Los siguientes programas ilustran el uso del método mencionado anteriormente:

Ejemplo 1: en este ejemplo, la array almacena algún valor de string y encuentra algún valor de string después de ordenar la array.

// C# program to demonstrate the
// Array.BinarySearch(Array, 
// Int32, Int32, Object, 
// IComparer) Method
using System;
  
class GFG {
      
// Main Method
public static void Main()
{
      
    // initializes a new Array
    string[] arr = new string[5] {"ABCD",
          "IJKL", "XYZ", "EFGH", "MNOP"};
  
    Console.WriteLine("The original Array");
      
    // calling "display" function
    display(arr);
  
  
    Console.WriteLine("\nsorted array");
      
    // sorting the Array
    Array.Sort(arr);
    display(arr);
  
    Console.WriteLine("\n1st call");
      
    // search for object "EFGH"
    object obj1 = "EFGH";
      
    // call the "FindObj" function
    FindObj(arr, obj1);
  
    Console.WriteLine("\n2nd call");
    object obj2 = "ABCD";
    FindObj(arr, obj2);
}
  
// find object method
public static void FindObj(string[] Arr,
                            object Obj)
{
    int index = Array.BinarySearch(Arr, 0, 3, 
         Obj, StringComparer.CurrentCulture);
           
    if (index < 0) 
    {
        Console.WriteLine("The object {0} is not "+
                    "found\nNext larger object is"+
                     " at index {1}", Obj, ~index);
    }
      
    else 
    {
        Console.WriteLine("The object {0} is at"+
                       " index {1}", Obj, index);
    }
}
  
// display method
public static void display(string[] arr)
{
    foreach(string g in arr)
    {
        Console.WriteLine(g);
    }
}
}
Producción:

The original Array
ABCD
IJKL
XYZ
EFGH
MNOP

sorted array
ABCD
EFGH
IJKL
MNOP
XYZ

1st call
The object EFGH is at index 1

2nd call
The object ABCD is at index 0

Ejemplo 2: En este ejemplo, aquí usamos el método » CreateInstance() » para crear una array con tipo y almacena algún valor entero y busca algunos valores después de ordenar la array.

//C# program to demonstrate the 
// Array.BinarySearch(Array, 
// Int32, Int32, Object, 
// IComparer) Method 
using System;
  
class GFG
{
      
// Main Method
public static void Main()
{
    // initializes a new Array.
    Array arr = Array.CreateInstance(typeof(Int32), 8);
      
    // Array elements 
    arr.SetValue(20, 0);
    arr.SetValue(10, 1);
    arr.SetValue(30, 2);
    arr.SetValue(40, 3);
    arr.SetValue(50, 4);
    arr.SetValue(80, 5);
    arr.SetValue(70, 6);
    arr.SetValue(60, 7);
      
    Console.WriteLine("The original Array");
      
    // calling "display" function
    display(arr);
  
      
    Console.WriteLine("\nsorted array");
      
    // sorting the Array
    Array.Sort(arr);
      
    display(arr);
      
    Console.WriteLine("\n1st call");
      
    // search for object 10
    object obj1 = 10;
      
    // call the "FindObj" function 
    FindObj(arr, obj1);
      
    Console.WriteLine("\n2nd call");
    object obj2 = 60;
    FindObj(arr, obj2);
}
  
// find object method
public static void FindObj(Array Arr, 
                         object Obj)
{
    int index = Array.BinarySearch(Arr, 1, 4,
         Obj, StringComparer.CurrentCulture);
           
    if (index < 0)
    {
        Console.WriteLine("The object {0} is not found\n"+
                     "Next larger object is at index {1}", 
                                            Obj, ~index );
    }
    else
    {
        Console.WriteLine("The object {0} is at "+
                        "index {1}", Obj, index );
    }
}
  
// display method
public static void display(Array arr)
{
    foreach (int g in arr)
    {
        Console.WriteLine(g);
    }
}
}
Producción:

The original Array
20
10
30
40
50
80
70
60

sorted array
10
20
30
40
50
60
70
80

1st call
The object 10 is not found
Next larger object is at index 1

2nd call
The object 60 is not found
Next larger object is at index 5

Referencia:

Publicación traducida automáticamente

Artículo escrito por SoumikMondal 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 *