Forum: PC-Programmierung mergesort


von newbi (Gast)


Angehängte Dateien:

Lesenswert?

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

von andreas kasper (Gast)


Angehängte Dateien:

Lesenswert?

hallo

hier hast du meinen mergesort den ich mal in der htl programmiert habe.

vielleicht kannst du damit was anfangen.

lg
andreas kasper

von newbi (Gast)


Lesenswert?

ne du...das hilft mir net unbedingt weiter. Danke trotzdem

von Zoch (Gast)


Lesenswert?

Kann man doch Singlesteppen !

Z.

von Karl H. (kbuchegg)


Lesenswert?

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.

von newbi (Gast)


Lesenswert?

@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

von newbi (Gast)


Lesenswert?

upps...hast anscheinend deinen beitrag geändert.ich habe auf den 
vorherigen geantwortet :)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Wolfram (Gast)


Lesenswert?

>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.

von Marco S (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.