V tej vadnici boste izvedeli, kako deluje binarno razvrščanje. Prav tako boste našli delovne primere binarnega iskanja v jezikih C, C ++, Java in Python.
Binarno iskanje je iskalni algoritem za iskanje položaja elementa v razvrščeni matriki.
Pri tem pristopu element vedno iščemo sredi dela polja.
Binarno iskanje je mogoče izvajati samo na razvrščenem seznamu elementov. Če elementi še niso razvrščeni, jih moramo najprej razvrstiti.
Binarno iskanje deluje
Binarni algoritem iskanja je mogoče izvajati na dva načina, o katerih bomo razpravljali spodaj.
- Iterativna metoda
- Rekurzivna metoda
Rekurzivna metoda sledi pristopu deli in vladaj.
Splošni koraki za obe metodi so opisani v nadaljevanju.
- Matrika, v kateri naj bi se iskalo, je:
Začetna matrika
Najx = 4
bo element, ki ga je treba iskati. - Nastavite dva kazalca nizko in visoko na najnižjem oziroma najvišjem položaju.
Nastavitev kazalcev
- Poiščite srednji element sredi polja, tj.
(arr(low + high)) / 2 = 6
.Srednji element
- Če je x == mid, potem vrnite mid.Else, primerjajte iskani element z m.
- Če
x> mid
primerjajte x s srednjim elementom elementov na desni strani sredine. To naredimo tako, da nizko nastavimo nalow = mid + 1
. - V nasprotnem primeru primerjajte x s srednjim elementom elementov na levi strani sredine. To se naredi tako, da visoko nastavite na
high = mid - 1
.Iskanje srednjega elementa
- Ponavljajte korake od 3 do 6, dokler nizka temperatura ne doseže visoke.
Srednji element
x = 4
je najdeno.Najdeno
Binarni algoritem iskanja
Metoda ponavljanja
naredi, dokler se kazalca nizka in visoka ne srečata. mid = (low + high) / 2 if (x == arr (mid)) return mid else if (x> A (mid)) // x je na desni strani low = mid + 1 else // x je vklopljen leva stran visoko = sredina - 1
Rekurzivna metoda
binarySearch (arr, x, low, high) if low> high return False else mid = (low + high) / 2 if x == arr (mid) return mid else if x <data (mid) // x is on desna stran vrne binarySearch (arr, x, mid + 1, high) else // x je na desni strani vrne binarySearch (arr, x, low, mid - 1)
Primeri Python, Java, C / C ++ (iterativna metoda)
Python Java C C ++ # Binary Search in python def binarySearch(array, x, low, high): # Repeat until the pointers low and high meet each other while low <= high: mid = low + (high - low)//2 if array(mid) == x: return mid elif array(mid) < x: low = mid + 1 else: high = mid - 1 return -1 array = (3, 4, 5, 6, 7, 8, 9) x = 4 result = binarySearch(array, x, 0, len(array)-1) if result != -1: print("Element is present at index " + str(result)) else: print("Not found")
// Binary Search in Java class BinarySearch ( int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) public static void main(String args()) ( BinarySearch ob = new BinarySearch(); int array() = ( 3, 4, 5, 6, 7, 8, 9 ); int n = array.length; int x = 4; int result = ob.binarySearch(array, x, 0, n - 1); if (result == -1) System.out.println("Not found"); else System.out.println("Element found at index " + result); ) )
// Binary Search in C #include int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int n = sizeof(array) / sizeof(array(0)); int x = 4; int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); return 0; )
// Binary Search in C++ #include using namespace std; int binarySearch(int array(), int x, int low, int high) ( // Repeat until the pointers low and high meet each other while (low <= high) ( int mid = low + (high - low) / 2; if (array(mid) == x) return mid; if (array(mid) < x) low = mid + 1; else high = mid - 1; ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int x = 4; int n = sizeof(array) / sizeof(array(0)); int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )
Primeri Python, Java, C / C ++ (rekurzivna metoda)
Python Java C C ++ # Binary Search in python def binarySearch(array, x, low, high): if high>= low: mid = low + (high - low)//2 # If found at mid, then return it if array(mid) == x: return mid # Search the left half elif array(mid)> x: return binarySearch(array, x, low, mid-1) # Search the right half else: return binarySearch(array, x, mid + 1, high) else: return -1 array = (3, 4, 5, 6, 7, 8, 9) x = 4 result = binarySearch(array, x, 0, len(array)-1) if result != -1: print("Element is present at index " + str(result)) else: print("Not found")
// Binary Search in Java class BinarySearch ( int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) public static void main(String args()) ( BinarySearch ob = new BinarySearch(); int array() = ( 3, 4, 5, 6, 7, 8, 9 ); int n = array.length; int x = 4; int result = ob.binarySearch(array, x, 0, n - 1); if (result == -1) System.out.println("Not found"); else System.out.println("Element found at index " + result); ) )
// Binary Search in C #include int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int n = sizeof(array) / sizeof(array(0)); int x = 4; int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )
// Binary Search in C++ #include using namespace std; int binarySearch(int array(), int x, int low, int high) ( if (high>= low) ( int mid = low + (high - low) / 2; // If found at mid, then return it if (array(mid) == x) return mid; // Search the left half if (array(mid)> x) return binarySearch(array, x, low, mid - 1); // Search the right half return binarySearch(array, x, mid + 1, high); ) return -1; ) int main(void) ( int array() = (3, 4, 5, 6, 7, 8, 9); int x = 4; int n = sizeof(array) / sizeof(array(0)); int result = binarySearch(array, x, 0, n - 1); if (result == -1) printf("Not found"); else printf("Element is found at index %d", result); )
Zapletenost binarnega iskanja
Časovne zapletenosti
- Najboljša zapletenost primera :
O(1)
- Povprečna zahtevnost primera :
O(log n)
- Najslabša zapletenost primera :
O(log n)
Zapletenost prostora
Prostorska zapletenost binarnega iskanja je O(n)
.
Aplikacije binarnega iskanja
- V knjižnicah Java, .Net, C ++ STL
- Med odpravljanjem napak se binarno iskanje uporablja za določitev mesta, kjer se napaka zgodi.