QuickSort will mir nicht in den Kopf (an einer Stelle)

Status
Nicht offen für weitere Antworten.
S

Samuel

Gast
Wir hatten QuickSort in Info in der Schule und wir hatten QuckSort im Studium.

Knapp zusammen gefasst: Man nimmt sich mittleren Wert aus, sagen wir, einem int Array und fängt dann an
von links zu gucken, was größer als der Wert der Mitte und von rechts was kleiner ist, dann wird getauscht.
Das tut man solange, bis die linke Seite die rechte erreicht hat, aber meine Frage:
Was macht Quicksort, wenn der rechte Wert bereits links vom Mittelwert, aber noch nicht am linken Laufwert ist?

Ich hab hier mal ein Beispiel:
10,8,1,6,0,4,7,5,2, ich nehme hier mal zur Verdeutlichung die 4 als Mittelwert

1. Phase
10,8,1,6,0,4,7,5,2
die roten werden getauscht
2. Phase
2,8,1,6,0,4,7,5,10
jetzt wird die 8 bereits mit dem Mittelstring getauscht, aber man guckt
weiterhin ob links und rechts in relation zu 4 stehen, also dem alten Mittelstring
3.Phase
2,4,1,6,0,8,7,5,10 (4 war der Vergleichswert)

Aber was tut Quicksort hier? dreht es die beiden einfach um? Welchen Sinn hat das?
Die 4 stand so oder so rechts von beiden, der tausch an dieser Stelle bewirkt doch
eigentlich kein bisschen was, oder irre ich mich?
 

Bleiglanz

Gesperrter Benutzer
Ja, ein Implementierungsfehler

6 und 0 werden bei einem richtigen Quicksort NIE miteinander verglichen (zumindest in dieser Runde), ein Vertauschen wär sinnlos

BTW: rede nicht vom "Wert", sondern von der "Position"; dass das Pivotelement den Wert=4 hat ist völlig belanglos; interessant ist nur, dass man dass Array an der 6. Stelle zerlegt hat

[edit] das ist völliger Quatsch
 
S

Samuel

Gast
Der Code ist der:
Code:
static void qSort(int[] f, int lPos, int rPos){
		   int lTemp, rTemp, h;
		   if (lPos < rPos){
		     lTemp = lPos; rTemp = rPos; int x = f[(lTemp+rTemp)/2];
		     
		     do { // grösser x nach rechts, kleiner x nach links:
		      
		       while (f[lTemp] < x) {lTemp++;  // wandere von links kommend
		       
		       }
		       while (f[rTemp] > x) rTemp--;  // wandere von rechts kommend
		       // Austausch der Werte:
		       if (lTemp <= rTemp) {
		         h=f[lTemp]; f[lTemp]=f[rTemp]; f[rTemp]=h;
		         lTemp++; rTemp--;
		       }
		     } while (lTemp <= rTemp);
		     // jetzt noch linke und rechte Seite (rekursiv) sortieren:
		     
		     qSort(f, lPos, rTemp);  // rTemp ist jetzt kleiner lTemp (siehe while-Abbruch!)
		     qSort(f, lTemp, rPos);  // s.o.
		  }
		 }

Das Ding funktioniert jedoch recht gut
 

Bleiglanz

Gesperrter Benutzer
glaub ich jetzt nicht unbedingt

Code:
             while (f[lTemp] < x) {lTemp++;  // wandere von links kommend
             
             }  // die hier ist komisch??
[edit] auch quatsch
 
S

Samuel

Gast
Sorry, muss so aussehen, war nur n versuch von was anderen
Code:
static void qSort(int[] f, int lPos, int rPos){
         int lTemp, rTemp, h;
         if (lPos < rPos){
           lTemp = lPos; rTemp = rPos; int x = f[(lTemp+rTemp)/2];
           
           do { // grösser x nach rechts, kleiner x nach links:
           
             while (f[lTemp] < x) lTemp++;  // wandere von links kommend
             while (f[rTemp] > x) rTemp--;  // wandere von rechts kommend
             // Austausch der Werte:
             if (lTemp <= rTemp) {
               h=f[lTemp]; f[lTemp]=f[rTemp]; f[rTemp]=h;
               lTemp++; rTemp--;
             }
           } while (lTemp <= rTemp);
           // jetzt noch linke und rechte Seite (rekursiv) sortieren:
           
           qSort(f, lPos, rTemp);  // rTemp ist jetzt kleiner lTemp (siehe while-Abbruch!)
           qSort(f, lTemp, rPos);  // s.o.
        }
       }
 

Bleiglanz

Gesperrter Benutzer
immer noch nicht
Code:
while (f[lTemp] < x) lTemp++;
hamm ersetz das durch
Code:
lTemp = x
und du hast das gleiche :)

[edit] nochmal quatsch
 
S

Samuel

Gast
Wieso? mit der While sucht man doch Werte links und rechts von dem Pivot?
 
S

Samuel

Gast
Klammern, was soll ich mit Klammern?

Der QuickSort da oben funktioniert doch, wir haben den auch vom Prof bekommen.
Ich wundere mich nur, dass dieser doch auch wie oben beschrieben tauscht
 

Bleiglanz

Gesperrter Benutzer
Samuel hat gesagt.:
Klammern, was soll ich mit klammern?

Der QuicSort da oben funktioniert doch, wir haben den auch vom Prof bekommen.
Ich wqundere mich nur, dass dieser doch auch wie oben beschrieben tauscht

ah, quatsch, hab mich verlesen

sollte schon passen!
 
S

Samuel

Gast
Kp, aber was ich meine ist, ich sehe doch richtig, dass dieser, wie oben beschrieben, auch 6 mit 0 tauschen würde, oder?
 

Bleiglanz

Gesperrter Benutzer
L10,8,1,6,0,4,7,5,R2

der pivot ist 4

von links-kommend landen wir bei 10 (weil nicht < 4)
von rechts-kommend landen wir bei 2 (weil nicht > 4)
vertausche

2,L8,1,6,0,R4,7,5,10

jetzt von links bei 8 weil nicht < 4
jetzt von rechts bei 4 weil nicht > 4
vertausche

2,4,1,L6,R0,8,7,5,10

von links bei 6 weil nicht < 4
von rechts bei 0 weil nicht > 4
vertausche

jetzt aber L=R, Ergebnis

2,4,1,0,6,8,7,5,10

und das aufteilen liefert

2,4,1,0 (die kleiner oder gleich pivot)

und

6,8,7,5,10 (die grösser als der pivot)

ist also alles völlig in butter, er muss (!) nochmal tauschen
 
S

Samuel

Gast
Also es ist ok, dass man 6 und 0 tauscht, obwohl bei bereits links vom Pivot sind?
 

Bleiglanz

Gesperrter Benutzer
ja, muss sogar

ich hab oben ziemlichen Unsinn geschrieben, es geht nicht um "links" oder "rechts", sondern um grösser oder kleiner

der Wert des Pivots ist entscheidend, nicht seine ursprüngliche Position

er ist ja in dem Beispiel schon auf Position 2 gerückt, aber das ist ganz egal

das wandern von links und rechts geht solange weiter bis sich die beiden Wanderer in der mitte treffen, und dieser Punkt ist dann der Zerlegungspunkt; und der Algo stellt einfach sicher, dass

alles links von diesem Treffpunkt <= dem Wert des Pivots

alles rechts von diesem Treffpunkt > dem Wert des Pivots
 
S

Samuel

Gast
Alles klar, hatte immer das Bild, das genau in der Mitte zerlegt wird, aber nun ist alles klar.
Danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P quickSort eines Objekt-Arrays geht nicht! Java Basics - Anfänger-Themen 11
B QuickSort - Fehler nicht zu finden Java Basics - Anfänger-Themen 2
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
M QuickSort und Liste Java Basics - Anfänger-Themen 6
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
L Quicksort verstehen Java Basics - Anfänger-Themen 3
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
Liondary Quicksort Java Basics - Anfänger-Themen 20
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
D Java Quicksort Java Basics - Anfänger-Themen 5
A Frage zu QuickSort Java Basics - Anfänger-Themen 9
B Quicksort mit Durchschnitt als Pivot Java Basics - Anfänger-Themen 1
K Quicksort Java Basics - Anfänger-Themen 3
M Quicksort - Probleme Java Basics - Anfänger-Themen 5
T QuickSort implementieren Java Basics - Anfänger-Themen 5
R QuickSort Verständis Problem (?) Java Basics - Anfänger-Themen 2
M Quicksort implementierung Java Basics - Anfänger-Themen 23
E Quicksort Java Basics - Anfänger-Themen 8
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
E QuickSort: Ergebniss speichern Java Basics - Anfänger-Themen 2
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
F Quicksort Java Basics - Anfänger-Themen 22
C Quicksort Invariante Java Basics - Anfänger-Themen 2
C QuickSort - Pivot in der Mitte Java Basics - Anfänger-Themen 5
P QuickSort iterativ Java Basics - Anfänger-Themen 5
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
W Quicksort Problem Java Basics - Anfänger-Themen 3
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
B Quicksort Struktogramm Java Basics - Anfänger-Themen 9
G Frage zu Quicksort Java Basics - Anfänger-Themen 18
0 Quicksort bsp Java Basics - Anfänger-Themen 5
B Quicksort Problem Java Basics - Anfänger-Themen 6
S Mein Quicksort Problem: he method quickSort(int[], int, int) Java Basics - Anfänger-Themen 2
M Quicksort Java Basics - Anfänger-Themen 2
C Quicksort raten Java Basics - Anfänger-Themen 2
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M Quicksort Java Basics - Anfänger-Themen 4
J Quicksort programmieren Probleme Java Basics - Anfänger-Themen 9
S Quicksort Programm Java Basics - Anfänger-Themen 7
D Quicksort Java Basics - Anfänger-Themen 3
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
0 Quicksort Java Basics - Anfänger-Themen 2
M QuickSort Java Basics - Anfänger-Themen 4
J QuickSort - kurze Frage Java Basics - Anfänger-Themen 9
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben