2016-04-23 11 views
0

Ich versuche rekursive binäre Suche in C++ zu implementieren. Allerdings kann mein Algorithmus die letzten beiden Elemente aus dem Testarray nicht finden. Ich weiß, dass mir etwas fehlt. Ich habe viel nach einer solchen Implementierung des binären Suchalgorithmus gesucht, aber ohne Erfolg. Kann mir jemand dabei helfen?Rekursive binäre Suche C++ ohne if-else-Anweisung

bool isMember (int x, int a[], int size){ 
    if (size == 0) return false; 
    return a[size/2] == x || 
      (a[size/2] < x && isMember (x,a+size/2,(size)/2)) || 
      (a[size/2] > x && isMember (x,a,(size)/2)); 
} 
+0

Wie sagen Sie, wenn es ohne eine if-Anweisung Ihr mittleres Element ist? – MeetTitan

+0

Was macht die 'member'-Funktion? –

+0

@MeetTitan a [size/2] repräsentiert das mittlere Element in jedem rekursiven Aufruf. Meine Schuld meinte ich mit Member. – yanis

Antwort

3

Keine if Aussagen hier:

#include <iostream> 

bool isMember (int x, int a[], int size) 
{ 
    return size == 0 ? false 
     : a[size/2] == x ? true 
     : a[size/2] > x ? isMember(x, a, size/2) 
     : isMember(x, a+size/2+1, size-(size/2+1)); 
} 

int main() 
{ 
    int v[]={1,2,4,8,16}; 

    for (int i=0; i<20; ++i) 
     std::cout << i << ": " << isMember(i, v, 5) << std::endl; 
    return 0; 
} 

Ausgang:

0: 0 
1: 1 
2: 1 
3: 0 
4: 1 
5: 0 
6: 0 
7: 0 
8: 1 
9: 0 
10: 0 
11: 0 
12: 0 
13: 0 
14: 0 
15: 0 
16: 1 
17: 0 
18: 0 
19: 0 
+0

haha ​​nein 'if', nur ternärer Operator: D nett, nett, ich mag es. – Vucko

+0

Ändern der Parameter in der Methode aus der Frage funktioniert es auch ohne den ternären Operator. – yanis

+0

Sie können die Frage nicht ändern. Wenn Sie die Anforderungen ändern möchten, stellen Sie eine neue Frage (ja, es ist auch ohne den ternären Operator leicht). –