<?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[Heap Sort hilfe :(]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Rekursion bereitet mir oft noch ziemliche Probleme. Mein Heapsort bricht mit run failed ab und ich weiß nicht wieso.</p>
<pre><code>int n = 10;
int heapsize;

void heapify(int A[], int i){

    int tmp, max;

    if(i==0){
        l = 1;
        r = 2;
    } else {
        l = 2 * i;
        r = 2 * i + 1;
    }

    if(l &lt;= heapsize &amp;&amp; A[l] &gt; A[i])
        max = l;
    else if(l &lt;= heapsize &amp;&amp; A[l] &lt; A[i])
        max = i;

    if(r &lt;= heapsize &amp;&amp; A[r] &gt; A[i])
        max = r;

    if(max != i){
        tmp = A[i];
        A[i] = A[max];
        A[max] = tmp;
        heapify(A,max);  //Fehlermeldung
    }

}

void buildheap(int A[]){
    for(int i = n/2; i&gt;=0; i--){
        heapify(A,i);
    }
}

void heapsort(int A[]){
    int tmp;
    heapsize = n;
    buildheap(A);
    for(int i = n-1 ; i&gt;=1; i--){
        tmp = A[0];
        A[0] = A[i];
        A[i] = tmp;
        heapsize--;
        heapify(A,0);
    }
}

int main(int argc, char** argv) {

    int B[10]={6,5,74,2,19,1,7,88,64,22};

    heapsort(B);

    return 0;
}
</code></pre>
<p>Der Fehler kommt scheinbar durch den selbstaufruf von Heapify. Wenn ich den auskommentiere kommt keine Fehlermeldung mehr. Aber ich kann mir nicht erklären woran es liegt <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/333033/heap-sort-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 06:50:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333033.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Jun 2015 11:55:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 13:46:13 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Rekursion bereitet mir oft noch ziemliche Probleme. Mein Heapsort bricht mit run failed ab und ich weiß nicht wieso.</p>
<pre><code>int n = 10;
int heapsize;

void heapify(int A[], int i){

    int tmp, max;

    if(i==0){
        l = 1;
        r = 2;
    } else {
        l = 2 * i;
        r = 2 * i + 1;
    }

    if(l &lt;= heapsize &amp;&amp; A[l] &gt; A[i])
        max = l;
    else if(l &lt;= heapsize &amp;&amp; A[l] &lt; A[i])
        max = i;

    if(r &lt;= heapsize &amp;&amp; A[r] &gt; A[i])
        max = r;

    if(max != i){
        tmp = A[i];
        A[i] = A[max];
        A[max] = tmp;
        heapify(A,max);  //Fehlermeldung
    }

}

void buildheap(int A[]){
    for(int i = n/2; i&gt;=0; i--){
        heapify(A,i);
    }
}

void heapsort(int A[]){
    int tmp;
    heapsize = n;
    buildheap(A);
    for(int i = n-1 ; i&gt;=1; i--){
        tmp = A[0];
        A[0] = A[i];
        A[i] = tmp;
        heapsize--;
        heapify(A,0);
    }
}

int main(int argc, char** argv) {

    int B[10]={6,5,74,2,19,1,7,88,64,22};

    heapsort(B);

    return 0;
}
</code></pre>
<p>Der Fehler kommt scheinbar durch den selbstaufruf von Heapify. Wenn ich den auskommentiere kommt keine Fehlermeldung mehr. Aber ich kann mir nicht erklären woran es liegt <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/2455991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2455991</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Sun, 07 Jun 2015 13:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 12:03:44 GMT]]></title><description><![CDATA[<p>Ncoh seltsamer ist, dass ich gerade gar nichts verändert habe, und es nun seit neustem trotzdem mit run failed abbricht, auch wenn das heapify(A, max) auskommentiert bleibt. Das war eben noch nicht so. Jetzt versteh ich gar nichts mehr <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/2455992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2455992</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Sun, 07 Jun 2015 12:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 12:09:56 GMT]]></title><description><![CDATA[<p>Wo kommt denn das 'n' in heapsort her?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2455993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2455993</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Sun, 07 Jun 2015 12:09:56 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 12:13:25 GMT]]></title><description><![CDATA[<p>Globale variable. Habs grad noch hingeschrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2455994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2455994</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Sun, 07 Jun 2015 12:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 14:06:04 GMT]]></title><description><![CDATA[<p>Also wenn ich in Zeile 31 das max rausnehme und z.B eine 1 reinschreibe kompiliert es. Nur funktioniert dann leider der Algorithmus selbst nicht... weiß nicht was ich da sonst machen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456001</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Sun, 07 Jun 2015 14:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 14:28:45 GMT]]></title><description><![CDATA[<p>Und du hältst es nicht für nötig, die Fehlermeldung des Compilers zu nennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456005</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 07 Jun 2015 14:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 14:44:07 GMT]]></title><description><![CDATA[<p>Würde ich gerne wenn eine käme...<br />
Er bricht mit &quot;run failed&quot; das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456007</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Sun, 07 Jun 2015 14:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 14:49:25 GMT]]></title><description><![CDATA[<p>Cabooze schrieb:</p>
<blockquote>
<p>Würde ich gerne wenn eine käme...<br />
Er bricht mit &quot;run failed&quot; das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nicht</p>
</blockquote>
<p>Tja, dann solltest du mal die Bedienung deiner IDE lernen. Der Compiler ist ganz sicher nicht so schweigsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456009</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 07 Jun 2015 14:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 15:02:51 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Cabooze schrieb:</p>
<blockquote>
<p>Würde ich gerne wenn eine käme...<br />
Er bricht mit &quot;run failed&quot; das kompilieren ab, wie ich sagte. Mehr bekomme ich leider auch nicht</p>
</blockquote>
<p>Tja, dann solltest du mal die Bedienung deiner IDE lernen. Der Compiler ist ganz sicher nicht so schweigsam.</p>
</blockquote>
<p>Oder wenigstens den Compiler nennen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456012</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 07 Jun 2015 15:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Sun, 07 Jun 2015 19:40:04 GMT]]></title><description><![CDATA[<p>Warte, gibts einen Compilerfehler oder crasht das Programm?<br />
Letzteres könnte mit deinen Arraygrenzen zu tun haben. Wenn das Array 10 groß ist, ist das letzte Element 9, nicht 10, &lt;= ist also falsch.<br />
Deine Nutzung von globalen Variablen ist auch nicht gerade toll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456038</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 07 Jun 2015 19:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Mon, 08 Jun 2015 17:04:44 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Warte, gibts einen Compilerfehler oder crasht das Programm</p>
</blockquote>
<p>Der Code von oben gibt bestimmt einen Compilerfehler, nämlich &quot;undeclared variable(s) line 10+11&quot;..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456128</guid><dc:creator><![CDATA[kartoffelbratgerät]]></dc:creator><pubDate>Mon, 08 Jun 2015 17:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Sort hilfe :( on Mon, 08 Jun 2015 17:54:06 GMT]]></title><description><![CDATA[<p>Cabooze schrieb:</p>
<blockquote>
<p>Rekursion bereitet mir oft noch ziemliche Probleme. ...</p>
</blockquote>
<p>an der Rekursion liegt es nicht. Es sind ein paar andere Fehler drin. Anbei die Korrektur:</p>
<pre><code>// int n = 10;  // &lt;== verzichte ganz auf globale Variablen (nur fehleranfällig)
// int heapsize;

// 'swap' braucht man öfter, daher auslagern; Alternative wäre: std::swap aus #include &lt;algorithm&gt;
void swap( int&amp; a, int&amp; b ) {
    int tmp = a;
    a = b;
    b = tmp;
}

void heapify(int A[], int heapsize, int i) { // nimm 'heapsize' mit in die Parameterliste auf!
    int l = 2 * i + 1;  // 1.) '+1' vergessen; 2.) if(i==0){ &lt;== Fallunterscheidung ist überflüssig 
    int r = l + 1;

    int max = i;    // initiale Belegung vergessen
    if(l &lt; heapsize &amp;&amp; A[l] &gt; A[i])    // '&lt; size' statt '&lt;= size'
        max = l;
    // else if(l &lt;= heapsize &amp;&amp; A[l] &lt; A[i]) // überflüssig und fehlerhaft, da im Fall 'A[l] == A[i]'  max nicht initialisiert wurde
    //    max = i;
    if(r &lt; heapsize &amp;&amp; A[r] &gt; A[max])  // 1.) '&lt; size' statt '&lt;= size'; 2.) statt 'A[r] &gt; A[i]', damit der größte(!) Wert nach oben kommt
        max = r;

    if(max != i){
        swap( A[i], A[max] );
        heapify(A,heapsize,max);
    }   
}

void buildheap(int A[], int heapsize){
    for(int i = heapsize/2-1; i&gt;=0; i--){
        heapify(A,heapsize,i);
    }
}

void heapsort(int A[], int heapsize){
    buildheap(A,heapsize);

    for( ; --heapsize &gt; 0; ){
        swap( A[0], A[heapsize] );
        heapify(A,heapsize,0);
    }
}

int main(int /*argc*/, char** /*argv*/) {
    int B[]={6,5,74,2,19,1,7,88,64,22}; // die '10' war redundant zur Anzahl der Zahlen in der Liste
    heapsort(B, sizeof(B)/sizeof(*B));
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456135</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 08 Jun 2015 17:54:06 GMT</pubDate></item></channel></rss>