W celu zliczenia ilości wystąpień wybranego elementu na dowolnej liście wystarczy algorytm o złożoności liniowej Θ(n). Wykorzystuje on jedną zmienną do zliczania i pętle, aby sprawdzić każdy element na liście. Kod realizujący to zadanie wygląda następująco:
Poprzedni kod zadziała dla dowolnej listy. Warto jednak zastanowić się na przypadkiem, gdy zliczane są elementy na liście posortowanej. Wtedy wszystkie wystąpienia szukanego elementu znajdują się na liście koło siebie.
W takim przypadku znając pierwszą pozycję szukanego elementu oraz ostatnią można policzyć ile takich elementów występuje na liście. Wykorzystanie do tego celu wyszukiwania binarnego można zmniejszyć złożoność algorytmu do Θ(logn).
Pierwszego wystąpienia na liście szukanego elementu a zajmuje się funkcja szukajPierwszy(), która szuka na liście dane o długości dl wartości a na indeksach z zakresu [zakrL, zakrP] w sposób rekurencyjny. Jest to kod oparty na wyszukiwaniu binarnym. W przypadku znalezienia elementu zwracany jest jego indeks, a w przypadku, gdy dany element nie istnieje to zwracana jest wartość -1.
(2.) Dopóki zakres nie jest pusty to: (3.) wyznacz indeks środkowego elementu. (4.) Jeśli został znaleziony szukany element i jest to większy element od poprzedniego na liście lub jest to pierwszy element to (5.) należy zwrócić indeks. W przeciwnym razie (6.) należy określić po której stronie jest szukany element od pozycji środkowej. (7.) Jeśli element a jest większy od elementu na środkowej pozycji to (8.) należy szukać na prawo od indeksu środkowego, a w przeciwnym wypadku (10.) na lewo od środkowego elementu. (13.) W przypadku, gdy przeszukiwany zakres zostanie wyczerpany, a szukana wartość nie zostanie odnaleziona to należy zwrócić -1.
W powyższym kodzie krytyczna jest linijka (4.). Tam w przeciwieństwie do typowego wyszukiwania binarnego program musi upewnić się, że znalazł pierwszy taki element na liście.
Analogicznie do wyszukiwania pierwszego elementu a na liście działa funkcja szukajOstatni(), która znajduje ostatni element a na liście. Tak samo jak w poprzednim przypadku jeśli element nie zostanie odnaleziony to funkcja zwraca -1.
Tak samo jak w przypadku o złożoności liniowej funkcja ileWystapien() przyjmuje trzy argumenty: dane - lista na której ma zostać element a, dl - długość listy dane, a - element do wyszukiwania.
(2.) Zainicjalizuj zmienne do zapisu indeksu pierwszego i ostatniego elementu. (3.) Wyszukaj pierwszy element na liście i (4.) jeśli nie zostanie znaleziony to (5.) zwróć, że jest 0 elementów a na liście. W przeciwnym razie (6.) znajdź ostatni element na liście dane i (7.) zwróć ile elementów a zostało znalezionych.
W celu przetestowania działania funkcji można skorzystać z poniższej funkcji main():