# Maximum mit Binärsuche?



## Ravenhall (31. Dez 2011)

Kann mir jemand erklären, wie in etwa ich nach einem Maximum mit einem Algorithmus logarithmischer Komplexität ähnlich der binären Suche, suche? Die Zahlen sollen streng Monoton aufsteigend und dann auch wieder fallend sein. Also z.B 1 4 5 8 13 11 9 7 5 4 2
Finden soll ich also die 13 soweit so gut. 
Wie würdet ihr das bewerkstelligen. 
Im moment geht es nur um das Theoretische ich würde gerne versuchen den Code selbst zu schreiben. 
:rtfm:


----------



## Marcinek (31. Dez 2011)

Vieleicht hilft das:

Recursive method to find maximum double (binary search style)? - Yahoo! Answers


----------



## Final_Striker (31. Dez 2011)

Würde das genauso wie die binäre Suche machen, in dem man vergleicht ob die Nachbarelemente kleiner als das aktuelle Element ist.


----------



## Ravenhall (3. Jan 2012)

Vielen Dank erstmal und allen nachträglich noch einen Guten Rutsch in dieses Jahr.


----------



## Ravenhall (7. Jan 2012)

So bin mitlerweile so weit wie ihr sehen könnt. Jedoch glaub ich das bei meinem Code spezielle die Binärsuche nicht richtig ist. Könnt ihr mal drüber schaun bitte. 


```
public static void main(String[] args) {
      
         int laenge = 0;      
         System.out.print("Bitte geben Sie die Länge ein und danach die Elemente: ");
         
         laenge = SavitchIn.readLineInt();
         
         int[] element = new int [laenge];  				//Erstelle Array mit eingegebener Laenge
      
         for (int i=0; i < element.length; i++){		//Zahlen werden solange eingelesen bis sie die Laenge der Elemente erreicht haben
            element[i] = SavitchIn.readInt(); 			//wird in ein Array geschrieben
         }
         
         System.out.println();
         
      	
		int[] feld;
         int links=0, mitte=(links+rechts)/2, rechts=feld.length-1, max=0;
			
         while (links < rechts){
			
             if (max < werte[mitte])
                  rechts = mitte - 1;  						 //Wert wird in linker Haelfte gesucht
                  
               else if (max > werte[mitte])
                  links = mitte + 1;    								// Wert wird in rechter Haelfte gesucht
                  	
               else
                  links = rechts + 1;   									//max gefunden! Schleife wird beendet
            
               anzSchritte++;
            }
      }
```


----------



## Ravenhall (8. Jan 2012)

Vergesst den letzten Beitrag. Hab mein Programm geschafft. Danke für die Hilfen. 
Musste noch eine for Schleife hinzufügen in der das Max gespeichert wird.


----------

