Endlosschleife im Quicksortalgorithmus

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

seit Tagen sitze ich an dieser Aufgabe und finde einfach den Fehler nicht.
Wir sollen ein Feld, mit Hilfe von zwei Methoden (vorsortierung und quicksort), durch Quicksort sortieren lassen.
Dazu schrieb ich ein Programm, welches allerdings wohl eine Endlosschleife enthält, die ich einfach nicht finde. Ich hab meinen Programmcode schon mit zig Anderen aus dem Internet verglichen, aber ich finde einfach nicht den Fehler.
Ich würde mich freuen wenn ihr mir helfen könntet.

PHP:
static int vorsortierung(int[] f, int li, int re)
 {
 int l=li;
 int pivot=f[li];
 while (li < re)
   {
   while (f[li]<pivot)
     {
     li=li++;
     }
   while (re >= l && f[re]>=pivot)
     {
     re=re--;
     }
   if (li<re)
     {
     int temp=f[li];
     f[li]=f[re];
     f[re]=temp;
     }  
   }
   if (re<l)
     {
     int temp=f[l];
     f[l]=pivot;
     pivot=temp;
     return l;
     }
     else 
       {
       return re;
       }
 }
 
 static void quicksort(int[] f, int li, int re)
 {
 if (li<re)
   {
   int t=vorsortierung(f,li,re);
   quicksort(f,li,t);
   quicksort(f,t+1,re);
   }
 }

public static void main (String[] args) throws IOException
  {
   BufferedReader din = new BufferedReader(                                    
                        new InputStreamReader(System.in));
   System.out.print("Wieviele Zufallszahlen sollen erzeugt werden?: ");            
 
   int l = Integer.parseInt(din.readLine());                   
              	int[] feld = erzeuge(l);     
                System.out.print("Unsortiertes Feld: ");
                ausgabe(feld);
                quicksort(feld,0,feld.length-1); 
                System.out.print("Sortiertes Feld: ");
                ausgabe(feld);

Die Methoden "erzeuge" und "ausgabe" funktionieren, deshalb habe ich sie aus Übersichtlichkeitsgründen weggelassen.
 
Zuletzt bearbeitet von einem Moderator:
Hi.
GreenThunder hat gesagt.:
Ich hab's mir nicht alles genau angeschaut, aber die Zeile ist falsch. Du benutzt den Postinkrement-Operator (der allein ja schon die Variable inkrementieren würde) und dennoch weist du den Originalwert von li wieder an li zu.

Code:
li++;
reicht völlig.

Gruß
 
Zuletzt bearbeitet:
deepthroat hat gesagt.:
Hi.
PHP:
li=li++;
Ich hab's mir nicht alles genau angeschaut, aber die Zeile ist falsch. Du benutzt den Postinkrement-Operator (der allein ja schon die Variable inkrementieren würde) und dennoch weist du den Originalwert von li wieder an li zu.

Code:
li++;
reicht völlig.

Gruß

Danke, das war mir gar nicht aufgefallen, aber recht hast du.
Es hilft mir auch beim Problem mit der Endlosschleife, die ist jetzt nämlich weg. :-)
 
Zurück