Mergesort
-
Hallo zusammen,
hab einen mergesort geschrieben komme aber nicht ganz weiter.
Hab einen Button Mergesort der folgenden code ausführt:
int m, s, n = anz; for (s=1; s<n; s+=s ) for (m=n-1-s; m>=0; m-=s+s) merge(m-s+1, m, m+s);
die funktion merge sieht so aus:
void merge(int lo, int m, int hi) { int i, j, k; i=0; j=lo; // vordere Hälfte von a in Hilfsarray b kopieren while (j<=m) Array1[i++]=Array[j++]; i=0; k=lo; // jeweils das nächstgrößte Element zurückkopieren while (k<j && j<=hi) if (Array1[i]<=Array[j]) Array[k++]=Array1[i++]; else Array[k++]=Array[j++]; // Rest von b falls vorhanden zurückkopieren while (k<j) Array[k++]=Array1[i++]; }
Array enthält die zu sortierenden zahlen. Array1 ist das hilfsarray. anz gibt die größe des array an, das kann sich der anwender aussuchen.
beim sortieren der zahlen 3,1,5,4,2 hab ich das problem das die zahl 2 nicht sortiert wird, also kommt als ergebnis: 1,3,4,5,2.
der ablauf für den benutzer wäre folgender:
als erstes legt er die größe des arrays fest durch eingabe einer zahl in ein edit feld. gibt er 5 ein wird anz = 4, weil der anwender will ja 5 felder aber array startet ja bei 0.
array und array1 werden mit 5 feldern angelegt.
dann gibt er die zu sortieren zahlen ein.
mit eienr anderen funktion werden diese in das array "array" geschrieben.dann kommt der button mergesort und dieser führt auch die funktion merge aus.
ich find den fehler einfach nicht wieso er die letzte zahl nicht mitsortiert.
-
Hallo!
Die 2 bleibt im Array oben stehen, weil die Indizevariablen beim Sortieren nie auf 4 gehen.
Ich habe das durch Ausgabe von geeigneten Traces herausbekommen. Man kann
es aber auch durch Debuggen sehen.
Prüf doch mal die Indizevariablen.Gruß, Lothar.