<?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[heapsort]]></title><description><![CDATA[<p>Hi,</p>
<p>ich vermisse das shift im heapsort...wo finde ich das...bzw kann man es etwas übersichtlicher coden?<br />
- wo ist mein shift?</p>
<p>nehemen wir an ich habe das parent node an pos i:<br />
- dann ist mein linkes child an pos 2<em>i+1<br />
- dann ist mein rechtes child an pos 2</em>i+2<br />
...wo sehe ich das?</p>
<pre><code class="language-cpp">class heapsort
{
	private:
		int *arr;
		int count;

	public:
		heapsort(int *a, int length)
		{
			arr = a;
			count = length;
		}

		void makeheap(int c)
		{
			for (int i = 1; i &lt; c; i++)
			{
				int val = arr[i];
				int s = i;
				int f = (s - 1) / 2;

				while (s &gt; 0 &amp;&amp; arr[f] &lt; val)
				{
					arr[s] = arr[f];
					s = f;
					f = (s - 1) / 2;
				}
				arr[s] = val;
			}
		}

		void sort()
		{
			for (int i = count - 1; i &gt; 0; i--)
			{
				swap(arr[i], arr[0]);
				makeheap(i);
			}
		}
};

int main()
{
    int arr[] = {12, 2, 8, 13, 58, 26, 17, 1, 90, 3};

    heapsort hp(arr, sizeof(arr)/sizeof(int));
    hp.makeheap(sizeof(arr)/sizeof(int));
    hp.sort();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/300225/heapsort</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 21:13:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300225.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Feb 2012 06:21:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to heapsort on Tue, 28 Feb 2012 06:21:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich vermisse das shift im heapsort...wo finde ich das...bzw kann man es etwas übersichtlicher coden?<br />
- wo ist mein shift?</p>
<p>nehemen wir an ich habe das parent node an pos i:<br />
- dann ist mein linkes child an pos 2<em>i+1<br />
- dann ist mein rechtes child an pos 2</em>i+2<br />
...wo sehe ich das?</p>
<pre><code class="language-cpp">class heapsort
{
	private:
		int *arr;
		int count;

	public:
		heapsort(int *a, int length)
		{
			arr = a;
			count = length;
		}

		void makeheap(int c)
		{
			for (int i = 1; i &lt; c; i++)
			{
				int val = arr[i];
				int s = i;
				int f = (s - 1) / 2;

				while (s &gt; 0 &amp;&amp; arr[f] &lt; val)
				{
					arr[s] = arr[f];
					s = f;
					f = (s - 1) / 2;
				}
				arr[s] = val;
			}
		}

		void sort()
		{
			for (int i = count - 1; i &gt; 0; i--)
			{
				swap(arr[i], arr[0]);
				makeheap(i);
			}
		}
};

int main()
{
    int arr[] = {12, 2, 8, 13, 58, 26, 17, 1, 90, 3};

    heapsort hp(arr, sizeof(arr)/sizeof(int));
    hp.makeheap(sizeof(arr)/sizeof(int));
    hp.sort();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2186463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186463</guid><dc:creator><![CDATA[algoman]]></dc:creator><pubDate>Tue, 28 Feb 2012 06:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to heapsort on Tue, 28 Feb 2012 07:05:30 GMT]]></title><description><![CDATA[<blockquote>
<p>bzw kann man es etwas übersichtlicher coden?</p>
</blockquote>
<pre><code class="language-cpp">void makeheap(int c)
        {
            for (int i = 1; i &lt; c; ++i) //normales inc i, bei allen Schleifen
            {
                int s = i;
                int f = (s - 1) &gt;&gt; 1; //Division durch Rechtsshiften

                while (s &gt; 0 &amp;&amp; arr[f] &lt; arr[i])
                {
                    arr[s] = arr[f];
                    s = f;
                    f = (s - 1) &gt;&gt; 1;
                }
                arr[s] = arr[i];
            }
        }
</code></pre>
<p>Und warum als Klasse? Funktion, die ein neues Array erzeugt, wäre besser. <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/2186468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186468</guid><dc:creator><![CDATA[Thuruk]]></dc:creator><pubDate>Tue, 28 Feb 2012 07:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to heapsort on Tue, 28 Feb 2012 15:43:47 GMT]]></title><description><![CDATA[<p>wo sehe ich das meine childs wie folgt zugegriffen wird?</p>
<p>- linkes child an pos 2<em>i+1<br />
- rechtes child an pos 2</em>i+2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186656</guid><dc:creator><![CDATA[algoman]]></dc:creator><pubDate>Tue, 28 Feb 2012 15:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to heapsort on Tue, 28 Feb 2012 17:29:41 GMT]]></title><description><![CDATA[<p>Thuruk schrieb:</p>
<blockquote>
<p>[...] Funktion, die ein neues Array erzeugt, wäre besser. <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>
</blockquote>
<p>Wer gibt den Speicher frei? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186728</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 28 Feb 2012 17:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to heapsort on Wed, 29 Feb 2012 15:47:12 GMT]]></title><description><![CDATA[<p>wo sehe ich das meine childs wie folgt zugegriffen wird?</p>
<p>- linkes child an pos 2<em>i+1<br />
- rechtes child an pos 2</em>i+2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187035</guid><dc:creator><![CDATA[algoman]]></dc:creator><pubDate>Wed, 29 Feb 2012 15:47:12 GMT</pubDate></item></channel></rss>