2016-11-25 3 views
0

Ich bin ziemlich neu in Java. Ich erstelle Sortieralgorithmen für ein int-Array, so dass jede Methode die Anzahl der Swaps und Vergleiche, die sie machen, zählt. Ich habe Probleme damit, Original Order, Sorted Order, Swaps und Comparonsons anzuzeigen. Nicht sicher, was ich tun muss, um es zu reparieren. Jede Hilfe würde sehr geschätzt werden.Java Bubble Sorter muss Swaps und Vergleiche zählen

public class IntBubbleSorter { 

    public static void bubbleSort(int[] array) 
    { 
     int lastPos; 
     int index; 
     int temp; 
     int count = 0; 
     int count2 = 0; 

     for (lastPos = array.length - 1; lastPos >= 0; lastPos--) 
      { 
      for (index = 0; index <= lastPos - 1; index++) 
      { 
       count2++; 

       if (array[index] > array[index + 1]) 
       { 
        count++; 
        temp = array[index]; 
        array[index] = array[index + 1]; 
        array[index + 1] = temp; 
       } 
      } 
      } 
     System.out.print("\n Swaps:" + count); 

     System.out.print("\n Comparisons:" + count2); 
    } 
} 


public class SortingTest { 

    public static void main(String[] args) 
    { 
     int[] values = { 1,53,86,21,49,32,90,65,33,11,34,68,54,32,78,80,35,22,96,59,265,44324,123,3123,25435}; 

     System.out.println("Original Order: "); 
     for (int element : values) 
      System.out.print(element + " "); 

     IntBubbleSorter.bubbleSort(values); 

     System.out.println("\nSorted order: "); 
     for (int element : values) 
      System.out.print(element + " "); 

     System.out.println(); 
    } 
} 

// Das ist, was es

Original Order: 
1 53 86 21 49 32 90 65 33 11 34 68 54 32 78 80 35 22 96 59 265 44324 123 3123 25435 
Swaps:80 
Comparisons:300 
Sorted order: 
1 11 21 22 32 32 33 34 35 49 53 54 59 65 68 78 80 86 90 96 123 265 3123 25435 44324 
+1

Warum denken Sie, dass das nicht stimmt? –

+0

Die Hauptmethode ist, die ursprüngliche Reihenfolge zu bekommen, aber dann zum Bubble-Sortierer zu gehen und die Swaps und Vergleiche zurück zur Hauptmethode zu bringen, um die Sortierung zu bekommen, was nicht die Reihenfolge ist, die ich wollte, aber alles, was ich versuche, funktioniert nicht. Ich werde mehr Sortiermethoden erstellen, die die gleiche Hauptmethode verwenden, und ich denke, es wird sehr unordentlich und verwirrend. Sollte ich eine Art "Get" -Methode haben, um die Swaps und Vergleiche zu bekommen? – Nosuchluck

+0

Das scheint vernünftig genug. Sie könnten erwägen, eine Art abstrakte Basisklasse zu erstellen, um die Vergleichs- und Auslagerungsfunktionen zu implementieren. Dann können Ihre verschiedenen Sortierimplementierungen die allgemeine Funktionalität übernehmen. Ich glaube, [Sedgewick] (http://www.informit.com/store/algorithms-in-java-parts-1-4-9780201361209) hat diesen Ansatz gewählt. –

Antwort

0

basierend auf Ihren Kommentar ausgibt Sie Ihre Zählvariablen statisch machen könnte und die Ausgabe in der Hauptmethode setzen wie so:

public class IntBubbleSorter { 

    public static int count = 0; 

    public static int count2 = 0; 

    public static void bubbleSort(int[] array) 
    { 
     int lastPos; 
     int index; 
     int temp; 
     count = 0; 
     count2 = 0; 

     for (lastPos = array.length - 1; lastPos >= 0; lastPos--) 
      { 
      for (index = 0; index <= lastPos - 1; index++) 
      { 
       count2++; 

       if (array[index] > array[index + 1]) 
       { 
        count++; 
        temp = array[index]; 
        array[index] = array[index + 1]; 
        array[index + 1] = temp; 
       } 
      } 
      } 
    } 
} 


public class SortingTest { 

    public static void main(String[] args) 
    { 
     int[] values = { 1,53,86,21,49,32,90,65,33,11,34,68,54,32,78,80,35,22,96,59,265,44324,123,3123,25435}; 

     System.out.println("Original Order: "); 
     for (int element : values) 
      System.out.print(element + " "); 

     IntBubbleSorter.bubbleSort(values); 

     System.out.println("\nSorted order: "); 
     for (int element : values) 
      System.out.print(element + " "); 

     System.out.println(); 

     System.out.print("\n Swaps:" + IntBubbleSorter.count); 

     System.out.print("\n Comparisons:" + IntBubbleSorter.count2); 
    } 
} 

Aber ich sollte erwähnen, dass static mit Vorsicht verwendet werden sollte.

+0

Ich habe das versucht, aber hauptsächlich haben Sie System.out.print ("\ n Swaps:" + count); und System.out.print ("\ n Vergleiche:" + count2); Ich bekomme einen Fehler für "count" und "count2". Er möchte, dass ich eine lokale Variable oder ein Feld für sie erstelle. – Nosuchluck

+0

@ ducatigirl74 Mein Fehler, ich war so eifrig zu antworten, dass ich übersehen habe, dass Ihr Codebeispiel zwei verschiedene Klassen enthielt. Sollte jetzt funktionieren. – Ayutac

+0

Das sah aus, als hätte es funktioniert, aber ich bekomme immer noch Fehler. Msgstr "Sichtbarkeit der Zählung (oder Zählung 2) ändern, um Getter und Setter für sie zu verpacken oder zu schaffen. – Nosuchluck