Java Quicksort

DaGrumb

Neues Mitglied
Tschuldigt, dass das alles auf Englisch ist, hab das auf mehreren Seiten gepostet aber noch keine Hilfe bekommen 🙂
Ich hab das Programm mit der Hilfe der Seite How do we Partition? gemacht, wenn irgendwer mir helfen könnte wäre ich darüber sehr froh.



quicksort() is getting started the first time with the values 0 for first and 99 for last. An array 100 units long, filled with 3-9 letters should be sorted, b.umwandeln() just declares the value of the unit, there's no error there.
I don't know, why I get so many errors, and why it sometimes works perfectly. The array is always filled with random letters.

Java:
public void quicksort(int first, int last){
    
    if (b.umwandeln(wertqs[first])<=b.umwandeln(wertqs[last])) {
      
      pivot = partition(first, last);
      this.quicksort(first, pivot-1);
      this.quicksort(pivot+1, last);
    } else {
      if (pel==0) {
        if (b.umwandeln(wertqs[first])>b.umwandeln(wertqs[last])) {
          String help = wertqs[first];
          wertqs[first] = wertqs[last];
          wertqs[last] = help;
          pel=1;
          quicksort(first, last);
        } // end of if
      } // end of if
    } // end of if-else 
  }

public int partition(int first, int last){
    int pivot1 = first;
    int up = first;
    int down = last;
    for (int p=0;p<1;p=p) {
      while (b.umwandeln(wertqs[up])<=b.umwandeln(wertqs[pivot1])) { 
        up=up+1;
      } // end of while
      
      while (b.umwandeln(wertqs[down])>b.umwandeln(wertqs[pivot1])) { 
        down=down-1;
      } // end of while
      
      if (up<down) {
        String help2 = wertqs[up];
        wertqs[up] = wertqs[down];
        wertqs[down] = help2;
      } else {
        p=1;
      } // end of if-else
    } // end of for
    String help3=wertqs[first];
    wertqs[first]=wertqs[down];
    wertqs[down]=help3;
    
    pivot1 = down;
    return pivot1;
  }
 
Zuletzt bearbeitet:
[ot]Crosspost werden nicht gerne gesehen! Und es wäre sicher kein Beinbruch gewesen diesen Text mal soeben auf Deutsch zu verfassen 😉[/ot]

Leider gibst du uns nur etwas Code aber keine Informationen zu den Fehler bzw. zur Aufgabe
 
Ich soll quicksort selber programmieren, also nicht die von Java vorgegebene Methode. Ich bin leider an Java-Editor gebunden und weiß selber nicht weiter was ich machen soll. :/
 
Du weist nicht was du machen sollst? Ja da können wir auch nicht helfen - wir haben hier kein Orakel. Also stell konkrete Fragen.:bahnhof:
 
Zuletzt bearbeitet:
Einfach einen QuickSort im Internet suchen kopieren und abgeben. Eigentlich müssten die meisten Lösungen gleich sein.

Ansonsten hat mein Vorredner recht. Mit so einer Einstellung bekommst du keinen akademischen Abschluss. Würde ich sogar als Zeitverschwendung ansehen. Und schon gar nicht kann man auf "ich weiß nix" eine ernst gemeinte Antwort geben.
 
Zuletzt bearbeitet:
Da schauen mir ein paar Sachen seltsam aus.

1) if (b.umwandeln(wertqs[first])<=b.umwandeln(wertqs[last])) {

Ob sortiert werden soll, hängt meiner Meinung nach nicht von den Werten, sondern nur von den Positionen von first und last ab.

2) if (pel==0) {

Ich vermute, pel ist eine Eigenschaft, die im Konstruktor auf 0 gesetzt wird.

Das könnte man auch anders lösen, indem man eine öffentliche quicksort-Methode hat und eine private rekursiv-quicksort-Methode. Die öffentliche Methode ruft dann mit den initialen Argumenten die private Methode auf.

3) for (int p=0;p<1;p=p) {

p wird bei dir auf 1 gesetzt, wenn up >= down. Oder anders ausgedrückt, die Schleife läuft, solange up < down. Das könntest du auch gleich mit einer while-Schleife lösen. Das p brauchst du nicht.

Ich hoffe, das hilft weiter 🙂
 
Zuletzt bearbeitet:

Zurück
Oben