Així com tots sabem cerca binària és un dels algorismes de cerca que s'aplica amb més freqüència quan es tracta d'estructures de dades on l'objectiu excèntric no és travessar tota la matriu. Aquí la matriu s'ha d'ordenar mentre comprovem l'element central i ignorem la meitat de la matriu, que no serveix per al sistema numèric. Bàsicament ignorem la meitat dels elements just després d'una comparació. Per tant, continuem iterant fins que es troba l'element o arribem a la conclusió que l'element no està present a la matriu.
Algoritmes:
- Compara x amb l'element central.
- Si x coincideix amb l'element central, retornem l'índex mitjà.
- En cas contrari, si x és més gran que l'element central, aleshores x només pot estar a la meitat subbarra dreta després de l'element mitjà. Així que tornem a la meitat dreta.
- En cas contrari (x és més petit) es repeteix per a la meitat esquerra.
Exemple 1
quina mida és la pantalla del meu ordinador
Java
// Java Program to Illustrate> // Iterative Binary Search> // Main class> // BinarySearch> class> GFG {> >// Method 1> >// Returns index of x> >// if it is present in arr[],> >// else return -1> >int> binarySearch(>int> arr[],>int> x)> >{> >int> l =>0>, r = arr.length ->1>;> >// Checking element in whole array> >while> (l <= r) {> >int> m = l + (r - l) />2>;> >// Check if x is present at mid> >if> (arr[m] == x)> >return> m;> >// If x greater, ignore left half> >if> (arr[m] l = m + 1; // If x is smaller, // element is on left side // so ignore right half else r = m - 1; } // If we reach here, // element is not present return -1; } // Method 2 // Main driver method public static void main(String args[]) { GFG ob = new GFG(); // Input array int arr[] = { 2, 3, 4, 10, 40 }; // Length of array int n = arr.length; // Element to be checked if present or not int x = 10; // Calling the method 1 and // storing result int result = ob.binarySearch(arr, x); // Element present if (result == -1) // Print statement System.out.println('Element not present'); // Element not present else // Print statement System.out.println('Element found at index ' + result); } }> |
>
>Sortida
Element found at index 3>
Complexitat temporal : O(log n)
Espai Auxiliar : O(1)
Exemple 2
Java
algorisme per a la cerca binària
// Java Program to Illustrate Recursive Binary Search> // Importing required classes> import> java.util.*;> // Main class> class> GFG {> >// Method 1> >// Recursive binary search> >// Returns index of x if it is present> >// in arr[l..r], else return -1> >int> binarySearch(>int> arr[],>int> l,>int> r,>int> x)> >{> >// Restrict the boundary of right index> >// and the left index to prevent> >// overflow of indices> >if> (r>= l && l<= arr.length ->1>) {> >int> mid = l + (r - l) />2>;> >// If the element is present> >// at the middle itself> >if> (arr[mid] == x)> >return> mid;> >// If element is smaller than mid, then it can> >// only be present in left subarray> >if> (arr[mid]>x)> >return> binarySearch(arr, l, mid ->1>, x);> >// Else the element can only be present> >// in right subarray> >return> binarySearch(arr, mid +>1>, r, x);> >}> >// We reach here when element is not present in> >// array> >return> ->1>;> >}> >// Method 2> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating object of above class> >GFG ob =>new> GFG();> >// Custom input array> >int> arr[] = {>2>,>3>,>4>,>10>,>40> };> >// Length of array> >int> n = arr.length;> >// Custom element to be checked> >// whether present or not> >int> x =>10>;> >// Calling above method> >int> result = ob.binarySearch(arr,>0>, n ->1>, x);> >// Element present> >if> (result == ->1>)> >// Print statement> >System.out.println(>'Element not present'>);> >// Element not present> >else> >// Print statement> >System.out.println(>'Element found at index '> >+ result);> >}> }> |
>
transmissió de mitjans
>Sortida
Element found at index 3>
Complexitat temporal : O(log n)
Espai Auxiliar : O(1)