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); } } }
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); } } }
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