Så som vi alle ved binær søgning er en af de søgealgoritmer, der oftest anvendes i forbindelse med datastrukturer, hvor det excentriske mål ikke er at krydse hele arrayet. Her skal array sorteres, da vi tjekker det midterste element og ignorerer halvdelen af arrayet, som ikke er til nogen nytte ifølge talsystemet. Vi ignorerer stort set halvdelen af elementerne lige efter en sammenligning. Så bliver vi ved med at iterere, indtil elementet er fundet, eller lander på en konklusion om, at elementet ikke er til stede i arrayet.
Algoritmer:
- Sammenlign x med det midterste element.
- Hvis x matcher med det midterste element, returnerer vi midtindekset.
- Ellers Hvis x er større end det midterste element, så kan x kun ligge i den højre halve undergruppe efter midtelementet. Så vi går igen for højre halvdel.
- Ellers (x er mindre) går igen for venstre halvdel.
Eksempel 1
Java
python skriv json til fil
omdøbe mappe linux
// 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); } }> |
>
>Produktion
java initialize array
Element found at index 3>
Tidskompleksitet : O(log n)
Hjælpeplads : O(1)
Eksempel 2
Java
// 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);> >}> }> |
systemsoftware
>
>
prøv at fange javaProduktion
Element found at index 3>
Tidskompleksitet : O(log n)
Hjælpeplads : O(1)