Hallo, ich bin gerade dabei den Quicksort Sortier-Algorithmus zu lernen habe aber irgendwie ein Problem damit.
Als Sortierbeispiel nehme ich einfach mal folgende Zahlenfolge die in einer verketteten Liste oder in einem 1D Array steht.
Pivot-Element ist das ganz rechte also die 3
Jetzt gehe ich von links aus nach rechts und suche eine Zahl die größer ist als die 3 - dort treffe ich direkt auf die 5 welche größer als die 3 ist. Dann gehe ich von rechts aus nach links und suche eine Zahl die kleiner ist als die 3 - also treffe ich auf die 1. Diese beiden Zahlen werden nun getauscht.
Ich suche nun wieder von links aus eine Zahl die größer ist als die 3 und treffe auf die 9 - von rechts aus suche ich eine Zahl die kleiner als 3 ist und treffe dabei auf die "größer-als-pivot-makierung", also abbruch. Nun wird das Pivotelement mit der betroffenen Zahl getauscht und es wird links und rechts vom Pivotelement getrennt.
Links vom Pivotelement sind nun alle Zahlen kleiner als das Pivotelement und rechts davon sind alle Zahlen größer als das Pivotelement.
Da die 1 und die 3 einzeln stehen sind sie nun laut Definition fertig sortiert. Also kümmer ich mich um den rechten Block. Und hier kommt nun mein Problem:
Ich nehme wieder das ganz rechte Element als Pivotelement - also die 9. Ich suche von links aus eine Zahl die größer ist. Was jetzt?
Endlossschleife
Oder soll ich einfach abbrechen wenn links von dem Pivotelement keine größere Zahl mehr steht UND wenn ich von rechts aus suchend über das Pivotelement laufe!?
Ich muss das ganze in C# programmieren und sehe schon endlose Programmiersessions vor mir
Als Sortierbeispiel nehme ich einfach mal folgende Zahlenfolge die in einer verketteten Liste oder in einem 1D Array steht.
Code:
591763
Pivot-Element ist das ganz rechte also die 3
Jetzt gehe ich von links aus nach rechts und suche eine Zahl die größer ist als die 3 - dort treffe ich direkt auf die 5 welche größer als die 3 ist. Dann gehe ich von rechts aus nach links und suche eine Zahl die kleiner ist als die 3 - also treffe ich auf die 1. Diese beiden Zahlen werden nun getauscht.
Code:
195763
Ich suche nun wieder von links aus eine Zahl die größer ist als die 3 und treffe auf die 9 - von rechts aus suche ich eine Zahl die kleiner als 3 ist und treffe dabei auf die "größer-als-pivot-makierung", also abbruch. Nun wird das Pivotelement mit der betroffenen Zahl getauscht und es wird links und rechts vom Pivotelement getrennt.
Code:
1|3|5769
Links vom Pivotelement sind nun alle Zahlen kleiner als das Pivotelement und rechts davon sind alle Zahlen größer als das Pivotelement.
Da die 1 und die 3 einzeln stehen sind sie nun laut Definition fertig sortiert. Also kümmer ich mich um den rechten Block. Und hier kommt nun mein Problem:
Ich nehme wieder das ganz rechte Element als Pivotelement - also die 9. Ich suche von links aus eine Zahl die größer ist. Was jetzt?
Endlossschleife
Oder soll ich einfach abbrechen wenn links von dem Pivotelement keine größere Zahl mehr steht UND wenn ich von rechts aus suchend über das Pivotelement laufe!?
Ich muss das ganze in C# programmieren und sehe schon endlose Programmiersessions vor mir
Zuletzt bearbeitet: