Complexitatea algoritmului este \(O(\log{n})\) (logaritmic) deoarece la fiecare pas vectorul este înjumătăţit.
Implementare în C++
// *** Binary Search *** // // d (dreapta) - limita inferioara // s (stanga) - limita superioara int cauta(int d, int s, int key, int * v) { if(s < d) return -1; // Nu s-a gasit nicio valoare int m = (d + s) / 2; // Elementul din mijloc if(key < v[m]) return cauta(d, m-1, key, v); // Cauta in subvectorul din stanga else if(key > v[m]) return cauta(m+1, s, key, v); // Cauta in subvectorul din dreapta else return m; // Gasit! }Exemplu:
#include <iostream> using namespace std; // *** Binary Search *** // // d (dreapta) - limita inferioara // s (stanga) - limita superioara int cauta(int d, int s, int key, int * v) { if(s < d) return -1; // Nu s-a gasit nicio valoare int m = (d + s) / 2; // Elementul din mijloc if(key < v[m]) return cauta(d, m-1, key, v); // Cauta in subvectorul din stanga else if(key > v[m]) return cauta(m+1, s, key, v); // Cauta in subvectorul din dreapta else return m; // Gasit! } int main() { int iteme[] = {2, 9, 11, 15, 28, 33, 40, 47, 51, 64, 76, 77, 82, 85, 94}; // 15 elemente int indice = cauta(0, 14, 76, iteme); cout << indice; // 10; iteme[10] == 76; system("PAUSE"); return 0; }
Niciun comentariu:
Trimiteți un comentariu
Rețineți: Numai membrii acestui blog pot posta comentarii.