Binärer Such-Algorithmus

Morpheyz

Grünschnabel
Hi,

ich steh vor einem kleinen Problem. Ich möchte einern binären Such-Algorithmus nach diesem Prinzip machen:

Code:
1 	while links ? rechts do   
2 	mitte := (links + rechts)/2   	{Mitte bestimmen, Ergebnis runden}
3 	if A[mitte] = Schluessel then return mitte   
4 	if A[mitte] > Schluessel then rechts := mitte-1   
5 	if A[mitte] < Schluessel then links := mitte+1   
6 	endwhile   
7 	return "nicht gefunden"
(Stammt von dieser Seite)

Mein Code sieht jetzt so aus: (Nicht der ganze Code, nur das Rechenverfahren)

Code:
            int[] entrys;
            entrys = new int[500];
            int entryCounter = 0;
            for(int i = 0; i < entrys.length;i++){
                  entrys[entryCounter] = entryCounter;
                  entryCounter++;
            }

            int anzahlI = 0;
            int keyI = 0;
            String anzahlS = "";
            String keyS = "";
            String returnRes = "";
            
            int leftI = 1;
            int rightI = entrys.length;
            
            anzahlS = jTextField1.getText();
            anzahlI = Integer.parseInt(anzahlS);
            
            keyS = jTextField2.getText();
            keyI = Integer.parseInt(keyS);
            
            int mitte = (leftI + rightI)/2;
            
            while(leftI < rightI){
                  if(entrys[mitte] == keyI){
                       returnRes = "";
                       returnRes += mitte;
                       jTextArea1.setText(returnRes);
                       break;
                  } else if (entrys[mitte] > keyI) {
                       rightI = mitte-1;
                  } else if (entrys[mitte] < keyI) {
                       leftI = mitte+1;
                  }
            }

Wenn ich das Programm starte und auf den Button zum ausrechnen drücke, hängt sich das Prog auf lastet meinen Prozessor zu 100% aus. o_O
Liegt da ein fehler im Programmcode vor oder hab ich den Code von der Seite falsch interpretiert?

Hoffe, mir kann jemand helfen. :(
 

fjfvo

Grünschnabel
Hallo,

diese Berechnung:

Java:
int mitte = (leftI + rightI)/2;

muss jedesmal innerhalb der while-Schleife aufgerufen werden.