Algoritmi binar i kërkimit është një mënyrë më efikase për të kërkuar një element specifik në një listë të renditur. Ndryshe nga kërkimi linear, i cili kontrollon elementët në mënyrë sekuenciale, kërkimi binar e ndan listën në gjysma dhe krahason elementin e synuar me elementin e mesëm. Ky proces përsëritet derisa të gjendet elementi i synuar ose të zbrazet diapazoni i kërkimit.
Si punon
- Filloni me të gjithë listën e renditur.
- Gjeni elementin e mesëm të gamës aktuale të kërkimit.
- Krahasoni elementin e mesëm me vlerën e synuar.
- Nëse elementi i mesëm është i barabartë me vlerën e synuar, kërkimi është i suksesshëm.
- Nëse elementi i mesëm është më i madh se objektivi, kërkoni në gjysmën e majtë të diapazonit.
- Nëse elementi i mesëm është më i vogël se objektivi, kërkoni në gjysmën e djathtë të diapazonit.
- Përsëritni hapat 2-6 derisa të gjendet elementi i synuar ose diapazoni i kërkimit të bëhet bosh.
Shembull
Le të shqyrtojmë një listë të renditur të numrave të plotë dhe duam të gjejmë numrin 34 duke përdorur kërkimin binar.
Lista e renditur: {12, 23, 34, 45, 56, 67, 89, 90}
- Filloni me të gjithë listën.
- Elementi i mesëm: 56(pozicioni 4). Krahaso me 34.
- 56 është më i madh se 34. Kërkoni në gjysmën e majtë.
- Element i ri i mesëm: 23(pozicioni 1). Krahaso me 34.
- 23 është më i vogël se 34. Kërko në gjysmën e djathtë.
- Elementi i mesëm i ri: 45(pozicioni 3). Krahaso me 34.
- 45 është më i madh se 34. Kërkoni në gjysmën e majtë.
- Elementi i mesëm i ri: 34(pozicioni 2). Objektivi u gjet.
Shembull Kodi në C++
#include <iostream>
#include <vector>
int binarySearch(const std::vector<int>& arr, int target) {
int left = 0;
int right = arr.size()- 1;
while(left <= right) {
int mid = left +(right- left) / 2;
if(arr[mid] == target) {
return mid;
} else if(arr[mid] < target) {
left = mid + 1;
} else {
right = mid- 1;
}
}
return -1;
}
int main() {
std::vector<int> numbers = {12, 23, 34, 45, 56, 67, 89, 90};
int target = 34;
int result = binarySearch(numbers, target);
if(result != -1) {
std::cout << "Element " << target << " found at position " << result << std::endl;
} else {
std::cout << "Element " << target << " not found in the array" << std::endl;
}
return 0;
}
Në shembullin e dhënë, binarySearch
funksioni përdoret për të gjetur numrin 34 në një listë të renditur të numrave të plotë. Rezultati do të jetë pozicioni 34 në listë(pozicionet fillojnë nga 0) ose -1 nëse numri nuk gjendet.