Hi. hätte da ne frage zum mergesort. und zwar bekomme ich nicht das richtige ergebnis heraus und ich bin mir auch nicht sicher ob mein progi dem mergesort noch entspricht. Progi wäre im anhang. wäre toll wenn mir wer helfen könnte. Ich bekommen statt 12345678 123345677 heraus. Warum? mfg
hallo hier hast du meinen mergesort den ich mal in der htl programmiert habe. vielleicht kannst du damit was anfangen. lg andreas kasper
Du gibst dir zwar wunderschön die Teilarrays aus, bevor du rekursiv in den merge() absteigst. Gib dir doch mal auch das Ergebnis des Zusammenbau-Schrittes aus. Getreu dem Motto: die Ausgangswerte ausgeben, die Endwerte ausgeben. Wenn die Endwerte nicht dem entsprechen, was eigentlich erwartet wird, dann muss in diesem Schritt irgendwo ein Fehler sein. Das sollte dann schon etwas Licht in die Sache bringen.
@karl-heinz ich habe mir die zwischenergebnisse ausgeben lassen aber da nur wenig daraus schließen können. das array wird richtig aufgeteilt (also bis nur mehr 1 element mehr über ist) aber beim zusammenbauen funzt es net so recht. ich denke es könnte daran liegen, dass ich am ende der aufgeteilten arrays keinen sogenannter sentinel angebunden habe. tja...was ich da als sentinel nehmen soll/kann/muss weiß ich net. als ausgabe bekomme ich 12335677. es fehlen also der vierer und der achter.genau die letzten der geteilten arrays. mfg cri
upps...hast anscheinend deinen beitrag geändert.ich habe auf den vorherigen geantwortet :)
newbi wrote: > upps...hast anscheinend deinen beitrag geändert.ich habe auf den > vorherigen geantwortet :) Yep. Mein Fehler. Ich hab zu spät gesehen, dass du dir Ausgaben eingebaut hast. Allerdings nur für die Eingangsparameter. Jetzt baust du dir in die 'Zusammenspiel-Schleife' auch noch Ausgaben rein und verfolgst, wie diese Schleife die beiden Arrays in ein einziges zusammenführt.
>if(x!=0) <---
Schau dir mal an was für den Fall x=1 passiert, und überlege dir nochmal
genau ob du mit arrays der Größe 0 arbeiten willst.
Falls es noch interssiert: Dein mergen funktioniert nicht.
1 | i=j=0; |
2 | for(k=0;k<n;k++) { |
3 | if(L[i]<R[j]) |
4 | a[k]=L[i++]; |
5 | else
|
6 | a[k]=R[j++]; |
7 | }
|
Angenommen a enthält 2 Elemente, dann enthalten die Arrays L und R je ein Element. L[i] und R[j] sind damit nur für i=j=0 gültig. Gruß Marco
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.