In einer geordneten Liste treten beim Vergleich des zu durchsuchenden Datenwerts mit dem mittleren Elementwert des Suchbereichs drei Situationen auf:
1) Wenn der zu findende Datenwert genau dem mittleren Elementwert entspricht, wird der Index des mittleren Elementwerts zurückgegeben.
2) Wenn der Wert der zu durchsuchenden Daten kleiner als der mittlere Elementwert ist, wird die erste Hälfte des gesamten Suchbereichs als neuer Suchbereich verwendet und 1) wird ausgeführt, bis ein gleicher Wert erreicht ist gefunden.
3) Wenn der Wert der zu durchsuchenden Daten größer als der mittlere Elementwert ist, wird die zweite Hälfte des gesamten Suchbereichs als neuer Suchbereich verwendet und 1) wird ausgeführt, bis ein gleicher Wert erreicht ist gefunden
4) Wenn am Ende kein gleicher Wert gefunden wird, wird eine Fehlermeldung zurückgegeben.
Als Binärbaum verstanden: Der Mittelwert ist die Wurzel des Binärbaums, die erste Hälfte ist der linke Teilbaum und die zweite Hälfte ist der rechte Teilbaum. Die Anzahl der Suchvorgänge für die halbierte Suchmethode entspricht genau der Anzahl der Ebenen, in denen sich der Wert befindet. Unter Bedingungen gleicher Wahrscheinlichkeit beträgt sie ungefähr
//Data ist das zu durchsuchende Array, x ist der zu durchsuchende Datenwert, beg ist der Anfang des Suchbereichs und last ist das Ende des Suchbereichs
//Nicht rekursive Methode
int BiSearch(int data[], const int x, int beg, int last)
{
int mid;//mittlere Position
Wenn (bitte > zuletzt)
{
Rückgabe -1;
}
While(beg <= last)
{
mid = (begin last) /
If (x == data[mid] )
Zurück in der Mitte;
else if (data[mid] < x)
Beginn = Mitte 1;
else if (data[mid] > x)
zuletzt = Mitte -
}
Rückgabe -1;
}
//Rekursive Methode
int IterBiSearch(int data[], const int x, int beg, int last)
{
int mid = -1;
mid = (zuletzt beginnen) / 2;
If (x == data[mid])
{
Zurück in der Mitte;
}
sonst wenn (x < data[mid])
{
return IterBiSearch(data, x, beg, mid - 1);
}
else if (x > data[mid])
{
return IterBiSearch(data, x, mid 1, last);
}
Rückgabe -1;
}
//Hauptfunktion
int _tmain(int argc, _TCHAR* argv[])
{
int data1[60] = {0};
int no2search = 45;
cout << "Das Array ist: " <<
int siz = sizeof(data1)/sizeof(int);
for (int i = 0; i < siz; i )
{
data1[i] = i;
cout << data1[i] <<
}
cout << endl;
int index = -1;
//index = BiSearch(data1, no2search, 0, siz);
Index = IterBiSearch(data1, no2search, 0, siz);
cout << "Index von" <<
Getchar();
Rückgabe 0;
}
/**
* Trouver la position du caractère dans le tableau par moitié (liste ordonnée)
* @param array Le tableau récupéré
* @param x Le personnage à rechercher
* @returns La position du caractère dans le tableau, s'il n'est pas trouvé, renvoie -1
*/
function binaireRecherche(array,x){
varPointBas=1;
var higPoint=array.length;
var returnValue=-1;
var point médian ;
var trouvé = faux ;
while ((lowPoint<=higPoint)&&(!found)){
midPoint=Math.ceil((lowPoint higPoint)/2);
//console.log(lowPoint "====" midPoint "====" highPoint);
si(x>array[midPoint-1]){
point bas=point médian 1;
>
sinon if(x
higPoint= midPoint-1;
>
sinon if(x=array[midPoint-1]){
trouvé=true;
>
}
si(trouvé){
returnValue=midPoint;
>
return returnValue;
>
/*var array2=[1,2,3,4,5,6,7,8,9,100,109];*/
var array2=['a','b','c','d','e','f','g'];
console.log(binarySearch(array2,'c'));