Heap Sort hilfe :(
-
Wo kommt denn das 'n' in heapsort her?
-
Globale variable. Habs grad noch hingeschrieben
-
Also wenn ich in Zeile 31 das max rausnehme und z.B eine 1 reinschreibe kompiliert es. Nur funktioniert dann leider der Algorithmus selbst nicht... weiß nicht was ich da sonst machen soll.
-
Und du hältst es nicht für nötig, die Fehlermeldung des Compilers zu nennen?
-
Würde ich gerne wenn eine käme...
Er bricht mit "run failed" das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nicht
-
Cabooze schrieb:
Würde ich gerne wenn eine käme...
Er bricht mit "run failed" das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nichtTja, dann solltest du mal die Bedienung deiner IDE lernen. Der Compiler ist ganz sicher nicht so schweigsam.
-
manni66 schrieb:
Cabooze schrieb:
Würde ich gerne wenn eine käme...
Er bricht mit "run failed" das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nichtTja, dann solltest du mal die Bedienung deiner IDE lernen. Der Compiler ist ganz sicher nicht so schweigsam.
Oder wenigstens den Compiler nennen...
-
Warte, gibts einen Compilerfehler oder crasht das Programm?
Letzteres könnte mit deinen Arraygrenzen zu tun haben. Wenn das Array 10 groß ist, ist das letzte Element 9, nicht 10, <= ist also falsch.
Deine Nutzung von globalen Variablen ist auch nicht gerade toll...
-
Nathan schrieb:
Warte, gibts einen Compilerfehler oder crasht das Programm
Der Code von oben gibt bestimmt einen Compilerfehler, nämlich "undeclared variable(s) line 10+11"..
-
Cabooze schrieb:
Rekursion bereitet mir oft noch ziemliche Probleme. ...
an der Rekursion liegt es nicht. Es sind ein paar andere Fehler drin. Anbei die Korrektur:
// int n = 10; // <== verzichte ganz auf globale Variablen (nur fehleranfällig) // int heapsize; // 'swap' braucht man öfter, daher auslagern; Alternative wäre: std::swap aus #include <algorithm> void swap( int& a, int& b ) { int tmp = a; a = b; b = tmp; } void heapify(int A[], int heapsize, int i) { // nimm 'heapsize' mit in die Parameterliste auf! int l = 2 * i + 1; // 1.) '+1' vergessen; 2.) if(i==0){ <== Fallunterscheidung ist überflüssig int r = l + 1; int max = i; // initiale Belegung vergessen if(l < heapsize && A[l] > A[i]) // '< size' statt '<= size' max = l; // else if(l <= heapsize && A[l] < A[i]) // überflüssig und fehlerhaft, da im Fall 'A[l] == A[i]' max nicht initialisiert wurde // max = i; if(r < heapsize && A[r] > A[max]) // 1.) '< size' statt '<= size'; 2.) statt 'A[r] > A[i]', damit der größte(!) Wert nach oben kommt max = r; if(max != i){ swap( A[i], A[max] ); heapify(A,heapsize,max); } } void buildheap(int A[], int heapsize){ for(int i = heapsize/2-1; i>=0; i--){ heapify(A,heapsize,i); } } void heapsort(int A[], int heapsize){ buildheap(A,heapsize); for( ; --heapsize > 0; ){ swap( A[0], A[heapsize] ); heapify(A,heapsize,0); } } int main(int /*argc*/, char** /*argv*/) { int B[]={6,5,74,2,19,1,7,88,64,22}; // die '10' war redundant zur Anzahl der Zahlen in der Liste heapsort(B, sizeof(B)/sizeof(*B)); return 0; }Gruß
Werner