Wyszukiwanie liniowe (klasyczne)

Program przeszukuje listę element po elemencie i zwraca indeks szukanego elementu lub informację, że go nie znaleziono.

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 Funkcja zwraca indeks znalezionego elementu lub minus 1 przecinek jeśli go nie ma. Linia 5. int linearSearch otwórz nawias okrągły int tab otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int n przecinek int szukany zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny n średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. if otwórz nawias okrągły tab otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości szukany zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. return i średnik prawy ukośnik prawy ukośnik zwracamy indeks. Linia 9. zamknij nawias klamrowy. Linia 10. zamknij nawias klamrowy. Linia 11. return minus 1 średnik prawy ukośnik prawy ukośnik nie znaleziono. Linia 12. zamknij nawias klamrowy. Linia 14. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 15. prawy ukośnik prawy ukośnik Gotowa tablica 20 elementów. Linia 16. int tab otwórz nawias kwadratowy 20 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 5 przecinek 12 przecinek 7 przecinek 9 przecinek 3 przecinek 18 przecinek 21 przecinek 4 przecinek 6 przecinek 10 przecinek. Linia 17. 15 przecinek 2 przecinek 8 przecinek 11 przecinek 14 przecinek 1 przecinek 19 przecinek 20 przecinek 13 przecinek 17 zamknij nawias klamrowy średnik. Linia 19. int szukany średnik. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj szukany element dwukropek cudzysłów średnik. Linia 21. cin zamknij nawias ostrokątny zamknij nawias ostrokątny szukany średnik. Linia 23. int wynik znak równości linearSearch otwórz nawias okrągły tab przecinek 20 przecinek szukany zamknij nawias okrągły średnik. Linia 25. 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 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Nie znaleziono elementu w tablicy kropka cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 27. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 28. 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 29. zamknij nawias klamrowy. Linia 31. return 0 średnik. Linia 32. zamknij nawias klamrowy.

Wyszukiwanie liniowe z wartownikiem - wersja bezpieczna (zastępowanie ostatniego elementu)

W tej wersji algorytmu nie dodaje się dodatkowego miejsca w tablicy. Zamiast tego

, czyli wartością szukaną. Dzięki temu pętla wyszukująca nie musi sprawdzać warunku końca tablicy - ma gwarancję, że zawsze natrafi na dopasowanie (prawdziwe lub sztuczne).

Po zakończeniu wyszukiwania ostatni element tablicy jest przywracany, aby nie zmienić jej zawartości.

Aby ustalić, czy znaleziono rzeczywisty element, czy jedynie wartownika, sprawdza się:

  • czy indeks znalezionego elementu jest mniejszy niż n − 1, lub

  • czy pierwotny ostatni element tablicy był równy wartości szukanej.

Jeśli żaden z tych warunków nie jest spełniony, oznacza to, że znaleziono jedynie wartownika, a element nie występuje w tablicy.

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 Wyszukiwanie liniowe z wartownikiem. Linia 5. int wyszukiwanieZWartownikiem otwórz nawias okrągły int tab otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int n przecinek int szukanaWartosc zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int ostatni znak równości tab otwórz nawias kwadratowy n minus 1 zamknij nawias kwadratowy średnik prawy ukośnik prawy ukośnik zapamiętujemy ostatni element tablicy. Linia 7. tab otwórz nawias kwadratowy n minus 1 zamknij nawias kwadratowy znak równości szukanaWartosc średnik prawy ukośnik prawy ukośnik ustawiamy wartownika. Linia 9. int i znak równości 0 średnik. Linia 10. while otwórz nawias okrągły tab otwórz nawias kwadratowy i zamknij nawias kwadratowy wykrzyknik znak równości szukanaWartosc zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. i plus plus średnik. Linia 12. zamknij nawias klamrowy. Linia 14. tab otwórz nawias kwadratowy n minus 1 zamknij nawias kwadratowy znak równości ostatni średnik prawy ukośnik prawy ukośnik przywracamy ostatni element. Linia 16. prawy ukośnik prawy ukośnik Jeśli znaleziono przed ostatnim elementem lub ostatni był szukany. Linia 17. if otwórz nawias okrągły i otwórz nawias ostrokątny n minus 1 kreska pionowa kreska pionowa ostatni znak równości znak równości szukanaWartosc zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. return i średnik. Linia 19. zamknij nawias klamrowy. Linia 21. return minus 1 średnik prawy ukośnik prawy ukośnik nie znaleziono. Linia 22. zamknij nawias klamrowy. Linia 24. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. prawy ukośnik prawy ukośnik Tablica 21 elementów przecinek ostatni element zostanie zastąpiony wartownikiem. Linia 26. int tab otwórz nawias kwadratowy 21 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy. Linia 27. 5 przecinek 12 przecinek 7 przecinek 9 przecinek 3 przecinek 18 przecinek 21 przecinek 4 przecinek 6 przecinek 10 przecinek. Linia 28. 15 przecinek 2 przecinek 8 przecinek 11 przecinek 14 przecinek 1 przecinek 19 przecinek 20 przecinek 13 przecinek 17 przecinek. Linia 29. 0 prawy ukośnik prawy ukośnik miejsce na wartownika. Linia 30. zamknij nawias klamrowy średnik. Linia 32. int szukana średnik. Linia 33. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj szukaną wartość dwukropek cudzysłów średnik. Linia 34. cin zamknij nawias ostrokątny zamknij nawias ostrokątny szukana średnik. Linia 36. int indeks znak równości wyszukiwanieZWartownikiem otwórz nawias okrągły tab przecinek 21 przecinek szukana zamknij nawias okrągły średnik. Linia 38. if otwórz nawias okrągły indeks znak równości znak równości minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 39. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Nie znaleziono elementu w tablicy kropka cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 40. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 41. 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 indeks otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 42. zamknij nawias klamrowy. Linia 44. return 0 średnik. Linia 45. zamknij nawias klamrowy.