<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MergeSort - Was stimmt hier nicht?]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;

using namespace std;

void ausgabeArray(int Array[], int max);

void mergeSort(int Array[], int anfang, int max);
void merge(int Array[], int anfang, int mitte, int max);

int main(){
    const int max = 10;
    int Array[max] = {8,2,1,5,7,3,2,9,6,4};

    ausgabeArray(Array, max);

    mergeSort(Array, 0, max-1);

    ausgabeArray(Array, max);

    return 0;
}

void ausgabeArray(int Array[], int max){
    for(int i = 0; i &lt; 10; i++){
        cout &lt;&lt; Array[i] &lt;&lt; &quot;, &quot;;
    }
    cout &lt;&lt; endl;
}

void mergeSort(int Array[], int anfang, int max){
    if(anfang &lt; max){
        int mitte = (anfang + max) / 2;

        mergeSort(Array, anfang, mitte);

        mergeSort(Array, mitte+1, max);

        merge(Array, anfang, mitte, max);
    }

}

void merge(int Array[], int anfang,int mitte, int max){
    int *tmpArray1, *tmpArray2;
    tmpArray1 = new int[mitte];
    tmpArray2 = new int[max-mitte+1];

    for(int i = 0; i &lt; mitte; i++){
        tmpArray1[i] = Array[i];
    }
    for(int i = mitte+1; i &lt; max; i++){
        tmpArray2[i] = Array[mitte + 1 + 1];
    }

    int j = 0;
    int k = 0;

    for(int i = 0; i &lt; max; i++){
        if(tmpArray1[j] &lt; tmpArray2[k]){
            Array[i] = tmpArray2[k++];
        }else {
            Array[i] = tmpArray1[j++];
        }
    }
    delete [] tmpArray1;
    delete [] tmpArray2;
}
</code></pre>
<p>Ich weiß um besten Willen nicht was mit meinem Quellcode nicht stimmt.</p>
<p>Output:<br />
0, 0, 0, 0, 0, 0, 0, 0, 63, 4,</p>
<p>bzw. Die Zahlen sind jedes mal anders <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Könntet ihr mir bitte helfen und mich von der Qual erlösen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336387/mergesort-was-stimmt-hier-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 11:19:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336387.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Jan 2016 19:19:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:21:58 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;

using namespace std;

void ausgabeArray(int Array[], int max);

void mergeSort(int Array[], int anfang, int max);
void merge(int Array[], int anfang, int mitte, int max);

int main(){
    const int max = 10;
    int Array[max] = {8,2,1,5,7,3,2,9,6,4};

    ausgabeArray(Array, max);

    mergeSort(Array, 0, max-1);

    ausgabeArray(Array, max);

    return 0;
}

void ausgabeArray(int Array[], int max){
    for(int i = 0; i &lt; 10; i++){
        cout &lt;&lt; Array[i] &lt;&lt; &quot;, &quot;;
    }
    cout &lt;&lt; endl;
}

void mergeSort(int Array[], int anfang, int max){
    if(anfang &lt; max){
        int mitte = (anfang + max) / 2;

        mergeSort(Array, anfang, mitte);

        mergeSort(Array, mitte+1, max);

        merge(Array, anfang, mitte, max);
    }

}

void merge(int Array[], int anfang,int mitte, int max){
    int *tmpArray1, *tmpArray2;
    tmpArray1 = new int[mitte];
    tmpArray2 = new int[max-mitte+1];

    for(int i = 0; i &lt; mitte; i++){
        tmpArray1[i] = Array[i];
    }
    for(int i = mitte+1; i &lt; max; i++){
        tmpArray2[i] = Array[mitte + 1 + 1];
    }

    int j = 0;
    int k = 0;

    for(int i = 0; i &lt; max; i++){
        if(tmpArray1[j] &lt; tmpArray2[k]){
            Array[i] = tmpArray2[k++];
        }else {
            Array[i] = tmpArray1[j++];
        }
    }
    delete [] tmpArray1;
    delete [] tmpArray2;
}
</code></pre>
<p>Ich weiß um besten Willen nicht was mit meinem Quellcode nicht stimmt.</p>
<p>Output:<br />
0, 0, 0, 0, 0, 0, 0, 0, 63, 4,</p>
<p>bzw. Die Zahlen sind jedes mal anders <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Könntet ihr mir bitte helfen und mich von der Qual erlösen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483810</guid><dc:creator><![CDATA[Andrioshe]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:32:20 GMT]]></title><description><![CDATA[<p>In solchen Fällen ist es sinvoll das Programm Schritt für Schritt in einem Debugger auszuführen und sich genau anzusehen was da passiert.</p>
<p>Ich empfehle erstmal ein möglichst kleines Array zu finden, das falsch sortiert wird,<br />
damit du dir möglichst wenige Verarbeitungsschritte anschauen musst bis der/die<br />
Fehler auftreten.</p>
<p>Meistens fällt es einem bei sowas sehr schnell wie Schuppen von den Augen -<br />
vorausgesetzt man weiss wie der Algorithmus korrekt abzulaufen hat.</p>
<p>Gruss,<br />
Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483814</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:32:20 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:36:52 GMT]]></title><description><![CDATA[<p>Der dickste Fehler ist erst einmal, dass du in deinen Zeilen 58-62 fröhlich um 1 hinter die Grenzen deiner Arrays zugreifst.</p>
<p>Der zweitdickste Fehler ist in Zeile 52, wo du fröhlich weit hinter die Grenzen deiner Arrays zugreifst.</p>
<p>Höchstwahrscheinlich gibt es noch viel mehr Fehler, aber dies sind erst einmal die Zeilen, bei denen der Debugger anschlägt.</p>
<p>Bitte benutz kein new. Für das was du da tust, böte sich ein vector an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483815</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:43:54 GMT]]></title><description><![CDATA[<p>Den Debugger werde ich sofort anschmeißen. Bin nur nicht so vertraut damit, sollte aber dank Internet schnell gelöst sein.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Der dickste Fehler ist erst einmal, dass du in deinen Zeilen 58-62 fröhlich um 1 hinter die Grenzen deiner Arrays zugreifst.</p>
<p>Der zweitdickste Fehler ist in Zeile 52, wo du fröhlich weit hinter die Grenzen deiner Arrays zugreifst.</p>
<p>Höchstwahrscheinlich gibt es noch viel mehr Fehler, aber dies sind erst einmal die Zeilen, bei denen der Debugger anschlägt.</p>
<p>Bitte benutz kein new. Für das was du da tust, böte sich ein vector an.</p>
</blockquote>
<p>Zeile 52 sollte eigentlich ein i sein keine 1.</p>
<p>New nutze ich um mich mit dem Pointer vertraut zu machen. Einen weiteren Zweck verfolge ich nicht damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Denke aber nicht das mein Sort deswegen nicht funktioniert ._.</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

void ausgabeArray(int Array[], int max);

void mergeSort(int Array[], int anfang, int max);
void merge(int Array[], int anfang, int mitte, int max);

int main(){
    const int max = 10;
    int Array[max] = {8,2,1,5,7,3,2,9,6,4};

    ausgabeArray(Array, max);

    mergeSort(Array, 0, max-1);

    ausgabeArray(Array, max);

    return 0;
}

void ausgabeArray(int Array[], int max){
    for(int i = 0; i &lt; 10; i++){
        cout &lt;&lt; Array[i] &lt;&lt; &quot;, &quot;;
    }
    cout &lt;&lt; endl;
}

void mergeSort(int Array[], int anfang, int max){
    if(anfang &lt; max){
        int mitte = (anfang + max) / 2;

        mergeSort(Array, anfang, mitte);

        mergeSort(Array, mitte+1, max);

        merge(Array, anfang, mitte, max);
    }

}

void merge(int Array[], int anfang,int mitte, int max){
    int *tmpArray1;
    int *tmpArray2;
    tmpArray1 = new int[mitte];
    tmpArray2 = new int[mitte+1];

    for(int i = 0; i &lt; mitte; i++){
        tmpArray1[i] = Array[i];
    }
    for(int i = mitte+1; i &lt; max; i++){
        tmpArray2[i] = Array[mitte + i + 1];
    }

    int j = 0;
    int k = 0;

    for(int i = 0; i &lt; max-1; i++){
        if(tmpArray1[j] &lt; tmpArray2[k]){
            Array[i] = tmpArray2[k++];
        }else {
            Array[i] = tmpArray1[j++];
        }
    }
    delete [] tmpArray1;
    delete [] tmpArray2;
}
</code></pre>
<p>Output:</p>
<blockquote>
<p>8, 2, 0, 5, 0, 0, 0, 0, 6, 4,</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2483816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483816</guid><dc:creator><![CDATA[Andrioshe]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:53:54 GMT]]></title><description><![CDATA[<p>Das wesentliche Problem mit Zeile 53 (vormals 52) besteht nach wie vor: Welchen Wert hat i? Wo werden deine Daten hingeschrieben? Und welchen Wertebereich hat der Ausdruck <code>mitte + i + 1</code> ? Arrays haben Indizes die von 0 anfangen und bis zu ihrer Größe minus 1 gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483818</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:53:54 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 19:59:53 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Das wesentliche Problem mit Zeile 53 (vormals 52) besteht nach wie vor: Welchen Wert hat i? Wo werden deine Daten hingeschrieben? Und welchen Wertebereich hat der Ausdruck <code>mitte + i + 1</code> ? Arrays haben Indizes die von 0 anfangen und bis zu ihrer Größe minus 1 gehen.</p>
</blockquote>
<p>oh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Naturlich... Habe überall hingeschaut nur nicht dahin .. i sollte natürlich 0. Der Rest stimmt so.</p>
<p>*edit<br />
Mit Zeile 52 möchte ich die Rechte Hälfte meines Arrays auf einen tmp kopieren. Dafür würden Array[mitte + i] die Daten notwendig sein. +1 wären in dieser Situation tatsächlich nicht notwendig... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

void ausgabeArray(int Array[], int max);

void mergeSort(int Array[], int anfang, int max);
void merge(int Array[], int anfang, int mitte, int max);

int main(){
    const int max = 10;
    int Array[max] = {8,2,1,5,7,3,2,9,6,4};

    ausgabeArray(Array, max);

    mergeSort(Array, 0, max-1);

    ausgabeArray(Array, max);

    return 0;
}

void ausgabeArray(int Array[], int max){
    for(int i = 0; i &lt; 10; i++){
        cout &lt;&lt; Array[i] &lt;&lt; &quot;, &quot;;
    }
    cout &lt;&lt; endl;
}

void mergeSort(int Array[], int anfang, int max){
    if(anfang &lt; max){
        int mitte = (anfang + max) / 2;

        mergeSort(Array, anfang, mitte);

        mergeSort(Array, mitte+1, max);

        merge(Array, anfang, mitte, max);
    }

}

void merge(int Array[], int anfang,int mitte, int max){
    int *tmpArray1;
    int *tmpArray2;

    tmpArray1 = new int[mitte];
    tmpArray2 = new int[mitte];

    for(int i = 0; i &lt; mitte; i++){
        tmpArray1[i] = Array[i];
    }
    for(int i = 0; i &lt; max - 1; i++){
        tmpArray2[i] = Array[mitte + i];
    }

    int j = 0;
    int k = 0;

    for(int i = 0; i &lt; max-1; i++){
        if(tmpArray1[j] &lt; tmpArray2[k]){
            Array[i] = tmpArray2[k++];
        }else {
            Array[i] = tmpArray1[j++];
        }
    }
    delete [] tmpArray1;
    delete [] tmpArray2;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2483819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483819</guid><dc:creator><![CDATA[Andrioshe]]></dc:creator><pubDate>Mon, 18 Jan 2016 19:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 20:09:36 GMT]]></title><description><![CDATA[<p>Jetzt musst du aber noch aufpassen, wie viele Daten du kopierst. max-2 Elemente sind ungefähr doppelt so viel, wie du möchtest.</p>
<p>Weiterhin ist nicht unbedingt klar, dass eine gerade Anzahl von Elementen sortiert werden soll. Wenn man an der Mitte teilt, kann es sein, dass eine der Hälften um 1 Element größer ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483820</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 18 Jan 2016 20:09:36 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 20:33:23 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Jetzt musst du aber noch aufpassen, wie viele Daten du kopierst. max-2 Elemente sind ungefähr doppelt so viel, wie du möchtest.</p>
<p>Weiterhin ist nicht unbedingt klar, dass eine gerade Anzahl von Elementen sortiert werden soll. Wenn man an der Mitte teilt, kann es sein, dass eine der Hälften um 1 Element größer ist.</p>
</blockquote>
<p>Tut mir leid <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ich weiß nicht welche 2 Elemente du meinst. Ich bin mit dem Debugger drüber und habe mitgezählt wie oft die Schleife ausgeführt wird (zum kopieren) und es passt eigentlich so wie es ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483822</guid><dc:creator><![CDATA[Andrioshe]]></dc:creator><pubDate>Mon, 18 Jan 2016 20:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to MergeSort - Was stimmt hier nicht? on Mon, 18 Jan 2016 20:42:22 GMT]]></title><description><![CDATA[<p>Nicht 2, sondern (max-2).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483823</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 18 Jan 2016 20:42:22 GMT</pubDate></item></channel></rss>