Wyszukiwanie binarne - implementacja algorytmu
Problem 1
Napisz program, który sprawdzi, czy uporządkowany zbiór n-elementowy zawiera element o wartości x.
Specyfikacja:
Dane:
zbiór – zbiór liczb całkowitych = {2, 4, 6, 8, 10}
x – szukana liczba = 4
Wynik:
Na standardowym wyjściu wyświetlany jest indeks szukanego elementu lub komunikat o jego braku.
Wyszukiwanie binarne - wersja iteracyjna
Polecenie 1
Przeanalizuj prezentację.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Wyszukiwanie binarne - wersja rekurencyjna
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. using namespace std średnik.
Linia 4. prawy ukośnik prawy ukośnik Rekurencyjne wyszukiwanie binarne.
Linia 5. int binarySearchRec otwórz nawias okrągły int tab otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int left przecinek int right przecinek int szukany zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. if otwórz nawias okrągły left zamknij nawias ostrokątny right zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. return minus 1 średnik prawy ukośnik prawy ukośnik elementu nie ma w tablicy.
Linia 8. zamknij nawias klamrowy.
Linia 10. int mid znak równości otwórz nawias okrągły left plus right zamknij nawias okrągły prawy ukośnik 2 średnik.
Linia 12. if otwórz nawias okrągły tab otwórz nawias kwadratowy mid zamknij nawias kwadratowy znak równości znak równości szukany zamknij nawias okrągły otwórz nawias klamrowy.
Linia 13. return mid średnik prawy ukośnik prawy ukośnik znaleziono.
Linia 14. zamknij nawias klamrowy.
Linia 15. else if otwórz nawias okrągły szukany otwórz nawias ostrokątny tab otwórz nawias kwadratowy mid zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 16. return binarySearchRec otwórz nawias okrągły tab przecinek left przecinek mid minus 1 przecinek szukany zamknij nawias okrągły średnik prawy ukośnik prawy ukośnik szukamy w lewej części.
Linia 17. zamknij nawias klamrowy.
Linia 18. else otwórz nawias klamrowy.
Linia 19. return binarySearchRec otwórz nawias okrągły tab przecinek mid plus 1 przecinek right przecinek szukany zamknij nawias okrągły średnik prawy ukośnik prawy ukośnik szukamy w prawej części.
Linia 20. zamknij nawias klamrowy.
Linia 21. zamknij nawias klamrowy.
Linia 23. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 24. prawy ukośnik prawy ukośnik Tablica musi być uporządkowana wykrzyknik.
Linia 25. int tab otwórz nawias kwadratowy 10 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 3 przecinek 5 przecinek 7 przecinek 9 przecinek 12 przecinek 15 przecinek 18 przecinek 20 przecinek 25 zamknij nawias klamrowy średnik.
Linia 27. int szukany średnik.
Linia 28. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj szukany element dwukropek cudzysłów średnik.
Linia 29. cin zamknij nawias ostrokątny zamknij nawias ostrokątny szukany średnik.
Linia 31. int wynik znak równości binarySearchRec otwórz nawias okrągły tab przecinek 0 przecinek 9 przecinek szukany zamknij nawias okrągły średnik.
Linia 33. if otwórz nawias okrągły wynik znak równości znak równości minus 1 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 34. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Nie znaleziono elementu kropka cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 35. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Znaleziono element na indeksie dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny wynik otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 37. zamknij nawias klamrowy.
Linia 39. return 0 średnik.
Linia 40. zamknij nawias klamrowy.
Ważne!
Złożoność czasowa:
Warunek działania: lista musi być posortowana
Rekurencja: dzieli zakres wyszukiwania na połowy