Den binære søgealgoritme er en mere effektiv måde at søge efter et bestemt element i en sorteret liste. I modsætning til lineær søgning, som kontrollerer elementer sekventielt, deler binær søgning listen i halvdele og sammenligner målelementet med det midterste element. Denne proces gentages, indtil målelementet er fundet, eller søgeområdet bliver tomt.
Hvordan det virker
- Start med hele den sorterede liste.
- Find det midterste element i det aktuelle søgeområde.
- Sammenlign det midterste element med målværdien.
- Hvis det midterste element er lig med målværdien, er søgningen vellykket.
- Hvis det midterste element er større end målet, søg i venstre halvdel af området.
- Hvis det midterste element er mindre end målet, søg i højre halvdel af området.
- Gentag trin 2-6, indtil målelementet er fundet, eller søgeområdet bliver tomt.
Eksempel
Lad os overveje en sorteret liste over heltal og ønsker at finde tallet 34 ved hjælp af binær søgning.
Sorteret liste: {12, 23, 34, 45, 56, 67, 89, 90}
- Start med hele listen.
- Mellemelement: 56(position 4). Sammenlign med 34.
- 56 er større end 34. Søg i venstre halvdel.
- Nyt midterelement: 23(position 1). Sammenlign med 34.
- 23 er mindre end 34. Søg i højre halvdel.
- Nyt midterelement: 45(position 3). Sammenlign med 34.
- 45 er større end 34. Søg i venstre halvdel.
- Nyt midterelement: 34(position 2). Mål fundet.
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 givne eksempel binarySearch
bruges funktionen til at finde tallet 34 i en sorteret liste over heltal. Resultatet vil være positionen 34 på listen(positionerne starter fra 0) eller -1, hvis tallet ikke findes.