<?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[max-HEAP Functor-Aufruf #1 mit falschem key 4711 (statt 666);]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich muss für die Uni einen Heap mit Heapsort (Max-Heap) programmieren. Mein konkretes Problem, wie man oben sieht liegt in der apply Methode. Der Fehler wird, dass habe ich schon heraus gefunden, ausgeworfen, weil bei jedem zweiten Aufruf von apply ascending der zweite und der dritte Wert immer vertauscht sind. Absteigend sortieren funktioniert einwandfrei. Ich weiß natürlich, dass es irgendwo in der Sortierung liegen muss, aber wie sich der Fehler einschleicht kann ich mir nicht erklären, weil sie ja bei jedem ersten Versuch richtig funktioniert. <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>
<p>//////////////////////////////////////////////////////////////////////////<br />
template &lt;typename E&gt;<br />
size_t HEAP&lt;E&gt;::apply(const Functor&lt;E&gt;&amp; f, Order order) const {<br />
if(HEAP&lt;E&gt;::n == -1) { //Container leer<br />
return 0;<br />
}</p>
<p>size_t rc = 0;</p>
<p>if(order != dontcare) {</p>
<p>size_t heapsize = n; //n = Anzahl der Werte im Heap<br />
BuildMaxHeap(heapsize);<br />
for(size_t i = size()-1; i &gt;= 1; i--) {<br />
swap(a[0], a[i]);<br />
heapsize--;<br />
heapify(0, heapsize);<br />
}</p>
<p>if(order == descending) {<br />
for (int i = (HEAP&lt;E&gt;::n+1); i-- &gt; 0; ) {<br />
++rc;<br />
if(!f(a[i]))break;<br />
}<br />
}</p>
<p>else if(order == ascending) {<br />
for (int i = 0; i &lt; (HEAP&lt;E&gt;::n+1); ++i) {<br />
++rc;<br />
if(!f(a[i]))break;<br />
}</p>
<p>}<br />
}</p>
<p>else if(order == dontcare) {<br />
for(int i=0; i &lt; (HEAP&lt;E&gt;::n+1); i++) {<br />
++rc;<br />
if(!f(HEAP&lt;E&gt;::a[i]))break;<br />
}<br />
}</p>
<p>int heapgroesse = n;</p>
<p>if(a[n]&gt;a[0]) {<br />
swap(a[0],a[n]);</p>
<p>for(size_t i=1; i&lt;size(); i++) {<br />
heapify(i, heapgroesse);<br />
}<br />
}</p>
<p>return rc;<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>template &lt;typename E&gt;<br />
void HEAP&lt;E&gt;::BuildMaxHeap(size_t zaehler) const{<br />
for(size_t i= zaehler/2-1; i&gt;0; i--) {<br />
heapify(i, zaehler);<br />
}<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>template &lt;typename E&gt;<br />
void HEAP&lt;E&gt;::heapify(size_t i, size_t heapsize) const{<br />
size_t left = 2<em>i + 1;<br />
size_t right = 2</em>i + 2;<br />
size_t largest;</p>
<p>if (left &lt; heapsize &amp;&amp; a[left] &gt; a[i]) {<br />
largest = left;<br />
}</p>
<p>else<br />
largest = i;</p>
<p>if (right &lt; heapsize &amp;&amp; a[right] &gt; a[largest]) {<br />
largest = right;<br />
}</p>
<p>if (largest != i) {<br />
swap(a[i], a[largest]);<br />
heapify(largest, heapsize);<br />
}<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>Alles andere funktioniert und meine Literatur ist mittlerweile auch schon erschöpft. Kann mir vielleicht irgendwer weiterhelfen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292679/max-heap-functor-aufruf-1-mit-falschem-key-4711-statt-666</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 18:09:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292679.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Sep 2011 12:32:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to max-HEAP Functor-Aufruf #1 mit falschem key 4711 (statt 666); on Thu, 15 Sep 2011 12:32:23 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich muss für die Uni einen Heap mit Heapsort (Max-Heap) programmieren. Mein konkretes Problem, wie man oben sieht liegt in der apply Methode. Der Fehler wird, dass habe ich schon heraus gefunden, ausgeworfen, weil bei jedem zweiten Aufruf von apply ascending der zweite und der dritte Wert immer vertauscht sind. Absteigend sortieren funktioniert einwandfrei. Ich weiß natürlich, dass es irgendwo in der Sortierung liegen muss, aber wie sich der Fehler einschleicht kann ich mir nicht erklären, weil sie ja bei jedem ersten Versuch richtig funktioniert. <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>
<p>//////////////////////////////////////////////////////////////////////////<br />
template &lt;typename E&gt;<br />
size_t HEAP&lt;E&gt;::apply(const Functor&lt;E&gt;&amp; f, Order order) const {<br />
if(HEAP&lt;E&gt;::n == -1) { //Container leer<br />
return 0;<br />
}</p>
<p>size_t rc = 0;</p>
<p>if(order != dontcare) {</p>
<p>size_t heapsize = n; //n = Anzahl der Werte im Heap<br />
BuildMaxHeap(heapsize);<br />
for(size_t i = size()-1; i &gt;= 1; i--) {<br />
swap(a[0], a[i]);<br />
heapsize--;<br />
heapify(0, heapsize);<br />
}</p>
<p>if(order == descending) {<br />
for (int i = (HEAP&lt;E&gt;::n+1); i-- &gt; 0; ) {<br />
++rc;<br />
if(!f(a[i]))break;<br />
}<br />
}</p>
<p>else if(order == ascending) {<br />
for (int i = 0; i &lt; (HEAP&lt;E&gt;::n+1); ++i) {<br />
++rc;<br />
if(!f(a[i]))break;<br />
}</p>
<p>}<br />
}</p>
<p>else if(order == dontcare) {<br />
for(int i=0; i &lt; (HEAP&lt;E&gt;::n+1); i++) {<br />
++rc;<br />
if(!f(HEAP&lt;E&gt;::a[i]))break;<br />
}<br />
}</p>
<p>int heapgroesse = n;</p>
<p>if(a[n]&gt;a[0]) {<br />
swap(a[0],a[n]);</p>
<p>for(size_t i=1; i&lt;size(); i++) {<br />
heapify(i, heapgroesse);<br />
}<br />
}</p>
<p>return rc;<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>template &lt;typename E&gt;<br />
void HEAP&lt;E&gt;::BuildMaxHeap(size_t zaehler) const{<br />
for(size_t i= zaehler/2-1; i&gt;0; i--) {<br />
heapify(i, zaehler);<br />
}<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>template &lt;typename E&gt;<br />
void HEAP&lt;E&gt;::heapify(size_t i, size_t heapsize) const{<br />
size_t left = 2<em>i + 1;<br />
size_t right = 2</em>i + 2;<br />
size_t largest;</p>
<p>if (left &lt; heapsize &amp;&amp; a[left] &gt; a[i]) {<br />
largest = left;<br />
}</p>
<p>else<br />
largest = i;</p>
<p>if (right &lt; heapsize &amp;&amp; a[right] &gt; a[largest]) {<br />
largest = right;<br />
}</p>
<p>if (largest != i) {<br />
swap(a[i], a[largest]);<br />
heapify(largest, heapsize);<br />
}<br />
}<br />
//////////////////////////////////////////////////////////////////////////</p>
<p>Alles andere funktioniert und meine Literatur ist mittlerweile auch schon erschöpft. Kann mir vielleicht irgendwer weiterhelfen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119690</guid><dc:creator><![CDATA[tinkabell]]></dc:creator><pubDate>Thu, 15 Sep 2011 12:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to max-HEAP Functor-Aufruf #1 mit falschem key 4711 (statt 666); on Thu, 15 Sep 2011 12:33:38 GMT]]></title><description><![CDATA[<p>Lies dir bitte den Link in meiner Signatur durch und poste deinen Code nochmal mit Code-Tags und aufs Wesentliche reduziert. So ist das ein ziemlicher krampf, das zu lesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119691</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 15 Sep 2011 12:33:38 GMT</pubDate></item></channel></rss>