Wyszukiwanie elementu w tablicy

0

Chciałbym się Was poradzić w pewnej sprawie.

Mam tablicę, załóżmy 100 elementową. Wypełniona jest liczbami typu int.

Od użytkownika pobieram dwie liczby x i y, które stanowią granice przedziału. 1<x<y<=1 000 000 000 .

Teraz chcę w pętli sprawdzić czy przypadkiem jakaś liczba z tego przedziału nie występuje w tablicy. Innymi słowy - zliczyć ile liczb z przedziału występuje w mojej tablicy.

Robiłem to w pętli tak: ( t - moja tablica, dl - jej dlugosc, max - najwiekszy element tablicy znany przeze mnie)

for(int i=x; i<y; i++)
{
     if(y > max)
             break;
      int *pom = find(t, t+dl, i);
        if(*akt)
}
            licz++;

Problem z tym jest taki, że dla tych moich dużych liczb wolno to działa. jak można by to zrobić szybciej?

0

Błąd w kodzie, powinno byc if(*pom).

0

Jeżeli masz nieposortowane elementy w tej tablicy to można tak:

int licznik = 0;
for(int i = 0; i < dl; i++)
    if(x <= t[i] && t[i] >= y)
        licznik++;

Jeżeli są posortowane to jeszcze szybciej - wyszukujesz binarnie indeksy skrajnych elementów tablicy mieszczących się w zadanym przedziale i na podstawie indeksów obliczasz ich ilość w tablicy.

0

Tak się składa, że elementy są posortowane rosnąco. Mógłbyś szerzej opisać to zagadnienie?

0

Jak są posortowane to wyszukiwanie binarne.

0

Dziękuję bardzo za odpowiedź, niezmiernie mi pomogliście!

0

Witam!
Wykorzystałem wyszukiwanie binarne z STLa. Jednak czas nie bardzo mnie zadowala, dla przedziału 1 10000000 program pracuje około 4s. Nie da się tego przyspieszyć jeszcze bardziej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1