Quick Sort - Vergleichsoperationen zählen

Xyarvius

Mitglied
Hallo,

ich möchte drei Funktion realisieren, die ein übergebenes Array mittels Insertion Sort, Quick Sort mit mittlerem Pivot und Quick Sort mit randomisiertem Pivot sortieren (die Elemente des übergebenen Arrays sollen comparable sein).
Der Clou dabei ist, dass die Funktionen die Anzahl der Vergleichsoperationen mitzählen und dann returnen sollen.
Für Insertion und Quick Sort mit mittlerem Pivot-Element habe ich bis jetzt folgenden Code:
Code:
public class Sorter {
    // nutzt Insertion Sort um ein übergebenes Array zu sortieren
    public static int insertionSort(Comparable[] toSort){
        // Anzahl der Vergleichsoperationen
        int counter= 0;
        // temporärer "Zwischenspeicher"
        Comparable tmp;
        //jedes Element (aßer dem ersten) mit allen Elementen link vergleichen und einordnen
        for (int i = 1; i < toSort.length; i++) {
            tmp = toSort[i];
            int j = i;
            //hier findet der Verhleichsprozess statt und wird counter erhöht 
            while (j > 0 && counter++>=0 && toSort[j - 1].compareTo(tmp) > 0) {
                toSort[j] = toSort[j - 1];
                j--;
            }
            toSort[j] = tmp;
        }
        return counter;
    }   
   
    // nutzt Quick Sort mit mittlerem Pivot um ein übergebenes Array zu sortieren
    public static int quickSortMid (Comparable[] toSort){
        // Anzahl der Vergleichsoperationen
        int counter= 0;
        return qSortMid(toSort, 0, toSort.length -1, counter);
    }
   
    // führt den eigentlichen Sortierprozess aus
    public static int qSortMid(Comparable[] toSort, int low, int high, int counter) {
        //bestimmt den mittleren Index des betrachteten Arrays/Arraybereiches
        int middle = low + (high - low) / 2;
        //bestimmt das mittlere Pivot
        Comparable pivot = toSort[middle];

        int i = low, j = high;
        //vergleicht die Elemente mit dem Pivotelement und sortiert die kleineren Elemente link, die größeren rechts 
        while (i <= j) {
            //in beiden Schleifen wird bei jeder Vergleichsoperation auch counter erhöht
            while (counter++ >= 0 && toSort[i].compareTo(pivot) < 0) {
                i++;
            }
            while (counter++ >= 0 && toSort[j].compareTo(pivot) > 0) {
                j--;
            }
            if (i <= j) {
                Comparable tmp = toSort[i];
                toSort[i] = toSort[j];
                toSort[j] = tmp;
                i++;
                j--;
            }
        }
        //sortiert die entstandenen kleineren Abschnitte rekursiv
        if (low < j)
            qSortMid(toSort, low, j, counter);

        if (high > i)
            qSortMid(toSort, i, high, counter);
       
        return counter;
    }
    //Testfunktion um Funktionalität zu prüfen
    public static void main(String[] args) {
        String [] x = {"C", "A", "B", "E", "Z", "J", "O"};
        Comparable [] y = {6,2,7,0,1,4,3,9,5,8};
        System.out.println(insertionSort(x));
        for (int i=0; i<x.length;i++){
            System.out.print(x[i]);
        }
        System.out.println("\n-------------");
        System.out.println(quickSortMid(y));
        for (int i=0; i<y.length;i++){
            System.out.print(y[i]);
        }
    }
}

Die Funktion die mit Insertion Sort arbeitet funktioniert schon mal (d.h. sie sortiert korrekt und zählt auch die Vergleichsoperationen korrekt).
Jetzt habe ich aber ein Problem damit, bei der (bzw. den beiden) Funktionen die mit Quick Sort arbeiten (ob mittleres oder randomisiertes Pivot dürfte an dem Problem nichts ändern).

Die Funktion qSort, die den eigentlichen Sortierprozess macht, arbeitet ja rekursiv. Dadurch habe ich am Ende das Problem, dass die Variable counter, die die Vergleichsoperationen mitzählt, nicht richtig ausgegeben wird.

Für das in der Testfunktion definierte Array {6,2,7,0,1,4,3,9,5,8} bekomme ich z.B. nur 12 Vergleichsoperationen. Das ist eindeutig zu wenig.

Als Java Laie weiß ich jetzt nicht, wie ich das Problem lösen kann. Das hat sicher was mit dem Wesen von Rekursion zu tun.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Quick Sort Java Basics - Anfänger-Themen 4
M Methoden Quick Sort Java Basics - Anfänger-Themen 5
G Quick Sort - bin ich zu blöd? Java Basics - Anfänger-Themen 7
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
G Insertion Sort mit Aray Java Basics - Anfänger-Themen 5
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
P Java Bubble Sort,Anfängerfehler Java Basics - Anfänger-Themen 4
S Methoden Sort Array Java Basics - Anfänger-Themen 9
I Erste Schritte sort() vs. sort() Java Basics - Anfänger-Themen 9
BadBat ArrayList<String> sort by last word Java Basics - Anfänger-Themen 8
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
O Insertion Sort Java Basics - Anfänger-Themen 4
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
J Fehler im Selection Sort Java Basics - Anfänger-Themen 5
O Listen sort-Methode Java Basics - Anfänger-Themen 1
V Heap-Sort Java Basics - Anfänger-Themen 0
T array.sort mit zwei Kriterien Java Basics - Anfänger-Themen 8
S Liste und Bubble Sort Java Basics - Anfänger-Themen 4
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
S Fehler bei Arrays.sort(array) - Methode!? Java Basics - Anfänger-Themen 3
P collections.sort Java Basics - Anfänger-Themen 2
B Arrays.sort Java Basics - Anfänger-Themen 4
P schneller Sort ? Java Basics - Anfänger-Themen 2
S Bubble Sort Java Basics - Anfänger-Themen 5
B Merge-Sort Analyse Java Basics - Anfänger-Themen 27
K Array.sort() Java Basics - Anfänger-Themen 12
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
B 2 dimensionales Array: Selection Sort Java Basics - Anfänger-Themen 4
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
P Ein sort problem Java Basics - Anfänger-Themen 6
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Selection Sort Problem Java Basics - Anfänger-Themen 19
Spin sort tokens - somebody knows a better solution? Java Basics - Anfänger-Themen 13
B Strings alphabentisch sortieren mit Hilfe von insertion sort Java Basics - Anfänger-Themen 6
P Array.sort // Arrays ausgeben Java Basics - Anfänger-Themen 21
S String sortieren mit Interface und sort() Java Basics - Anfänger-Themen 6
F Arrays.sort( ) Problem Java Basics - Anfänger-Themen 14
J Liste von Integers mit Selection Sort sortieren Java Basics - Anfänger-Themen 3
B Selection sort Java Basics - Anfänger-Themen 33
E Selection Sort für beliebige Objekte Java Basics - Anfänger-Themen 24
U Selection Sort schnellere Variante Java Basics - Anfänger-Themen 17
T Selection-Sort-Algorithmus Java Basics - Anfänger-Themen 9
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
D Insertion sort auf eine liste Java Basics - Anfänger-Themen 4
X Counting Sort Java Basics - Anfänger-Themen 5
P Problem mit Insertion Sort Java Basics - Anfänger-Themen 4
D sort.exe über java aufrufen Java Basics - Anfänger-Themen 2
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
hedges Insertion Sort Algorithmus problem Java Basics - Anfänger-Themen 18
N Collections Sort ArrayList<> Java Basics - Anfänger-Themen 7
K Arrays.sort() Java Basics - Anfänger-Themen 2
S Collection Sort Java Basics - Anfänger-Themen 15
O Arrays und sort Java Basics - Anfänger-Themen 4
I Selection-Sort // Array *help* Java Basics - Anfänger-Themen 2
G sort(int[] a, int fromIndex, int toIndex) Java Basics - Anfänger-Themen 5
J Selection Sort in Liste implementieren Java Basics - Anfänger-Themen 3
F Klassenmethode Arrays.sort(Object[]a) Java Basics - Anfänger-Themen 2
H Bubble sort array Java Basics - Anfänger-Themen 12
M Bubble-Sort und null Werte Java Basics - Anfänger-Themen 4
G Zählen von Zuweisungen bei Bubble Sort Java Basics - Anfänger-Themen 3
I Methode Arrays.sort(Object[] arr) Java Basics - Anfänger-Themen 19
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
0 Selection Sort funktioniert nicht. Java Basics - Anfänger-Themen 3
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
U Array.sort auf variable Array-Größe anwenden Java Basics - Anfänger-Themen 3
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
D Collections.sort() frage Java Basics - Anfänger-Themen 6
V Sortieren mit Bubble-Sort Java Basics - Anfänger-Themen 5
G Arrays.sort() will nicht sortieren Java Basics - Anfänger-Themen 8
G float-Array _ohne_ Arrays.sort sortieren Java Basics - Anfänger-Themen 5
A Bubble-Sort Java Basics - Anfänger-Themen 3
R Frage zu Bubble-Sort Java Basics - Anfänger-Themen 10
X Zählen von arithmetischen Operationen und Vergleichsoperationen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben