Den binære søkealgoritmen er en mer effektiv måte å søke etter et spesifikt element i en sortert liste. I motsetning til lineært søk, som sjekker elementer sekvensielt, deler binært søk listen i halvdeler og sammenligner målelementet med midtelementet. Denne prosessen gjentas til målelementet er funnet eller søkeområdet blir tomt.
Hvordan det fungerer
- Start med hele den sorterte listen.
- Finn midtelementet i gjeldende søkeområde.
- Sammenlign det midterste elementet med målverdien.
- Hvis det midterste elementet er lik målverdien, er søket vellykket.
- Hvis det midterste elementet er større enn målet, søk i venstre halvdel av området.
- Hvis det midterste elementet er mindre enn målet, søk i høyre halvdel av området.
- Gjenta trinn 2-6 til målelementet er funnet eller søkeområdet blir tomt.
Eksempel
La oss vurdere en sortert liste over heltall og ønsker å finne tallet 34 ved hjelp av binært søk.
Sortert liste: {12, 23, 34, 45, 56, 67, 89, 90}
- Start med hele listen.
- Mellomelement: 56(posisjon 4). Sammenlign med 34.
- 56 er større enn 34. Søk i venstre halvdel.
- Nytt midtelement: 23(posisjon 1). Sammenlign med 34.
- 23 er mindre enn 34. Søk i høyre halvdel.
- Nytt midtelement: 45(posisjon 3). Sammenlign med 34.
- 45 er større enn 34. Søk i venstre halvdel.
- Nytt midtelement: 34(posisjon 2). Mål funnet.
Eksempelkode i 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;
}
I det gitte eksemplet binarySearch
brukes funksjonen til å finne tallet 34 i en sortert liste over heltall. Resultatet vil være posisjonen 34 i listen(posisjonene starter fra 0) eller -1 hvis tallet ikke finnes.