mergesort

Gast #486536
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
Angehängte Dateien:
#486692
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.
Gast #486701
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
#486736
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.
Gast #498458
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren