Quicksort
-
Bekomm einen stackoverflow und weiß nicht warum
#include <iostream> int teile(int links,int rechts,int* x) { int store=rechts; int pivot=x[rechts]; while(rechts>links) { while(x[links]<pivot) { if(links>=rechts) break; links++; } while(x[rechts]>pivot) { if(links>=rechts) break; rechts--; } int tmp=x[links]; x[links]=x[rechts]; x[rechts]=tmp; } int tmp=x[links]; x[links]=pivot; x[store]=tmp; return links; } void quicksort(int links,int rechts,int* x) { int pivot_index=teile(links,rechts,x); quicksort(0,pivot_index,x); quicksort(pivot_index+1,rechts,x); } void main(void) { int x[]={8,4,13,11,5,19,12}; quicksort(0,(sizeof(x)/sizeof(x[0]))-1,x); for(int i=0;i<sizeof(x)/sizeof(int);i++) { std::cout<<x[i]; } }
-
Du hast keine Randbedingung bei der Rekursion, quicksort ruft sich unendlich oft auf.
-
Danke. Hab ich jetzt ergänzt. Trotzdem stimmt etwas noch nicht .
#include <iostream> int teile(int links,int rechts,int* x) { int store=rechts; int pivot=x[rechts]; while(rechts>links) { while(x[links]<pivot) { if(links>=rechts) break; links++; } while(x[rechts]>pivot) { if(links>=rechts) break; rechts--; } int tmp=x[links]; x[links]=x[rechts]; x[rechts]=tmp; } int tmp=x[links]; x[links]=pivot; x[store]=tmp; return links; } void quicksort(int links,int rechts,int* x) { if(links<rechts) { int pivot_index=teile(links,rechts,x); quicksort(0,pivot_index,x); quicksort(pivot_index+1,rechts,x); } } void main(void) { int x[]={8,4,13,11,5,19,12}; quicksort(0,(sizeof(x)/sizeof(x[0]))-1,x); for(int i=0;i<sizeof(x)/sizeof(int);i++) { std::cout<<x[i]; } }
-
Es gibt soviele Implementierungen für den Quicksort.
Versteh nicht warum manche es kompliziert machen, wenn es auch einfacher geht.
Hab jetzt einen ganz neuen Ansatz gefunden.Grüße !
-
Cox schrieb:
Du hast keine Randbedingung bei der Rekursion
Mathematiker?

blurry333 schrieb:
Versteh nicht warum manche es kompliziert machen, wenn es auch einfacher geht.
Wenn es dir nicht ums Selbst-Implementieren, sondern ums Sortieren geht, kannst du auch
std::sort()aus der Standardbibliothek verwenden. Das wäre dann wohl das Einfachste.
-
Nexus schrieb:
Mathematiker?

Gott bewahre!
Ich hab mir das nur so angewöhnt 
-
Cox schrieb:
Gott bewahre!
Ich hab mir das nur so angewöhnt 
Okay. Ich habe mich nur etwas gewundert, da ich im Zusammenhang mit Rekursion eher von Abbruchbedingung spreche. Randbedingung hat mich an Differentialgleichungen erinnert...
