mikrocontroller.net

Forum: PC-Programmierung mergesort


Autor: newbi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: andreas kasper (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo

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

vielleicht kannst du damit was anfangen.

lg
andreas kasper

Autor: newbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne du...das hilft mir net unbedingt weiter. Danke trotzdem

Autor: Zoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man doch Singlesteppen !

Z.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: newbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: newbi (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls es noch interssiert:

Dein mergen funktioniert nicht.
i=j=0;
for(k=0;k<n;k++) {
    if(L[i]<R[j])
        a[k]=L[i++];
    else
        a[k]=R[j++];
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.