2016-04-22 1 views
0

Ich bin in Java eine schnelle Art der Codierung und ich habe den Teilungsabschnitt abgeschlossen, aber aus irgendeinem Grund, hält mein Programm läuft immer mit:endlose while-Schleife in Quicksort

x was swapped with x 

wobei x irgendeine zufällige Ganzzahl, aber jedes Mal, wenn sie gedruckt wird, dieselbe Ganzzahl. Ich habe versucht, dies zu debuggen, aber es läuft jedes Mal im Debugger gut. Was mache ich falsch? Hier ist mein Code mit Ausnahme der Elternklasse, Array-Generator, etc.

class QuickSort extends BasicSort { 

public QuickSort() { 
    super("QuickSort"); 
} 

public void sort() { 
    int pivot = data[data.length/2]; 
    int low = 0, high = data.length - 1; 

    while (true) { 
     while (low < (data.length - 1) && data[low] < pivot) { 
      System.out.println(data[low] + " is less than " + pivot); 
      low++; 
     } 
     while (high > 0 && data[high] > pivot) { 
      System.out.println(data[high] + " is greater than " + pivot); 
      high--; 
     } 

     if (low >= high) { 
      break; 
     } else { 
      int temp = data[low]; 
      data[low] = data[high]; 
      data[high] = temp; 

      System.out.println(data[low] + " was swapped with " + data[high]); 
     } 
    } 
} 
} 
+2

Setzen Sie eine Druckanweisung in den 'if block', um zu prüfen, ob diese Bedingung erfüllt ist. –

+4

Mögliches Duplikat: http://stackoverflow.com/questions/20355634/quicksort-infinite-loop-if-there-are-repeating-values ​​ – Nier

+0

Yup, das scheint es zu sein. Wenn die Werte gleich sind, wird gedruckt. Es ist einfach seltsam, wie es selten im Debugger passiert ist und nie, wenn ich es regelmäßig ausgeführt habe. –

Antwort

0

Dies ist ein Problem mit identischen Nummern, ich muss Code für diese Bedingung schreiben. Danke Leute.