A több elemből álló keresési algoritmus a lista egy adott elemének minden előfordulását megkeresi. Az egyelemes keresési algoritmusokkal ellentétben ez a megközelítés nyomon követi a célelem többszöri előfordulását, és visszaadja a pozícióik listáját.
Hogyan működik
- Kezdje a lista elejétől.
- Ismételje meg a lista minden elemét.
- Hasonlítsa össze az aktuális elemet a célértékkel.
- Ha az aktuális elem megegyezik a célértékkel, rögzítse a pozícióját.
- Folytassa a következő elemmel, és ismételje meg a 3-4.
- A teljes lista iterációja után adja vissza a rögzített pozíciók listáját.
Példa
Tekintsük az egész számok listáját, és meg akarjuk találni a 23 szám összes előfordulását.
Lista: {12, 23, 45, 23, 56, 23, 89, 90}
- Kezdje elölről: 12. Nem a kívánt szám.
- Ugrás a következő elemre: 23. Egyezés található, a pozíció rögzítése 1-ként.
- Ugrás a következő elemre: 45. Nem a kívánt szám.
- Ugrás a következő elemre: 23. Talált egyezés, rögzítse a pozíciót 3-asként.
- Ugrás a következő elemre: 56. Nem a kívánt szám.
- Ugrás a következő elemre: 23. Talált egyezés, a pozíció rögzítése 5-ként.
- Ugrás a következő elemre: 89. Nem a kívánt szám.
- Ugrás a következő elemre: 90. Nem a kívánt szám.
- Az iteráció után adja vissza a pozíciók listáját: [1, 3, 5].
Példakód C++ nyelven
#include <iostream>
#include <vector>
std::vector<int> multipleItemSearch(const std::vector<int>& arr, int target) {
std::vector<int> positions;
for(int i = 0; i < arr.size(); ++i) {
if(arr[i] == target) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::vector<int> numbers = {12, 23, 45, 23, 56, 23, 89, 90};
int target = 23;
std::vector<int> result = multipleItemSearch(numbers, target);
std::cout << "Occurrences of " << target << " found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
Az adott példában a multipleItemSearch
függvényt arra használjuk, hogy megkeressük a 23-as szám összes előfordulását egy egész számok listájában. Az eredmény egy vektor lesz, amely tartalmazza az összes előfordulás helyét(a pozíciók 0-tól kezdődnek).