<?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 &#x2F; Komplexität]]></title><description><![CDATA[<p>Moin,<br />
also ich soll ein Programm Mergesort erstellen, bei dem nur die erste Hälfte des Arrays in ein Hilfsarray ausgelagert werden soll, das hab ich sogar hinbekommen und läuft auch :xmas1:</p>
<p>Nun soll eine besere Version geschrieben werden, die nur Zahlen auslagert, die auch ausgelagert werdeb müssen:</p>
<p>z.B. erste Hälfte 1 2 5<br />
zweite Hälfte 4 6 7</p>
<p>1 2 brauchen nicht ausgelagert werden, da sie kleiner sind als das erste Element der zweiten Hälfte.</p>
<p>Siehe mein zweites Posting.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169954/mergesort-komplexität</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 02:45:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169954.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Jan 2007 13:33:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mergesort &#x2F; Komplexität on Tue, 16 Jan 2007 17:33:41 GMT]]></title><description><![CDATA[<p>Moin,<br />
also ich soll ein Programm Mergesort erstellen, bei dem nur die erste Hälfte des Arrays in ein Hilfsarray ausgelagert werden soll, das hab ich sogar hinbekommen und läuft auch :xmas1:</p>
<p>Nun soll eine besere Version geschrieben werden, die nur Zahlen auslagert, die auch ausgelagert werdeb müssen:</p>
<p>z.B. erste Hälfte 1 2 5<br />
zweite Hälfte 4 6 7</p>
<p>1 2 brauchen nicht ausgelagert werden, da sie kleiner sind als das erste Element der zweiten Hälfte.</p>
<p>Siehe mein zweites Posting.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207118</guid><dc:creator><![CDATA[jippel]]></dc:creator><pubDate>Tue, 16 Jan 2007 17:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort &#x2F; Komplexität on Wed, 17 Jan 2007 01:52:06 GMT]]></title><description><![CDATA[<p>So, nun hab ich es <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="🙂"
    /></p>
<p>Nun wird immer geprüft, ob die Zahl überhaupt ausgelagert werden muß.<br />
Wie sieht das nun mit der Komplexität aus ?<br />
Also bei der &quot;normalen&quot; Funktion mergesort wo immer die Hälfte des Arrays ausgelagert werden muß ist die ja 1.5 n * log(n)</p>
<p>Bei meiner neuen Funktion ist die ja im besten Fall 0, wenn die Zahlen schon in der richtigen Reihenfolge sind.<br />
Im schlechtstesn Fall sind es denn ja auch 1.5 n * log(n), wenn die ganze Hälfte ausgelagert werden muß.</p>
<p>Wie ist nun die Komplexität im Durchschnitt ? einfach (Komplexität im besten Fall + Komplexität im schlechtesten Fall) / 2 ??</p>
<pre><code class="language-cpp">void merge(int lo, int m, int hi)
	{
		int b[10];					//Hilfsarray
		int i, j, k, verbleib;		// neu: int verbleib, siehe unten

		i = 0; j = lo; verbleib = 0;

		while (a[j] &lt; a[m+1])		// wenn die Zahlen der ersten Hälfte kleiner sind 
									// als die erste Zahl der zweiten Hälfte, müssen sie nicht ausgelagert werden
		{
			j++;
			verbleib++; // verbleib zeigt an, wieviele Zahlen nicht ausgelagert wurden, um sie beim
									// Zurückkopieren nicht zu überschreiben
		}

		while (j &lt;= m)				// restlichen Zahlen in das Hilfsarray auslagern
		{
			b[i] = a[j];
			i++; j++;
			log++;
			schritt++; // Test für Komplexität
		}

		i = 0; k = lo + verbleib; // k + verbleib, damit man die verbliebenen Zahlen im Array nicht überschreibt

		while (k&lt;j &amp;&amp; j&lt;=hi)
		{
			if (b[i]&lt;=a[j])
			{
				a[k] = b[i];
				k++; i++;
				log++;
				schritt++; // Test für Komplexität
			}
			else
			{
				a[k]=a[j];
				k++; j++;
				log++;
				schritt++; // Test für Komplexität
			}

		}

		while (k&lt;j)
		{
			a[k] = b[i];
			k++; i++;
			log++;
			schritt++; // Test für Komplexität
		}

	}
</code></pre>
<p>Edit:</p>
<pre><code class="language-cpp">////////////////////////////////////////////
// Funktion merge
// Jan-Philipp Lux / Matr. 26 46 71
// Hausarbeit Informatik 2/3 WS2006/07
////////////////////////////////////////////

void merge(int lo, int m, int hi)
	{

		int i, j, k, verbleib;

		i = 0; j = lo; verbleib = 0;

		while (a[j] &lt; a[m+1])		// Überlegung: Wenn die Zahlen der ersten Hälfte kleiner sind 
									// als die erste Zahl der zweiten Hälfte, müssen sie nicht ausgelagert werden
		{
			j++;
			verbleib++;				// &quot;verbleib&quot; zeigt an, wieviele Zahlen NICHT ausgelagert wurden, um sie beim
									// Zurückkopieren nicht zu überschreiben
		}

		while (j &lt;= m)				// Die restlichen Zahlen in das Hilfsarray auslagern
		{
			b[i] = a[j];
			i++; j++;
		}

		i = 0; k = lo + verbleib; // k = lo + verbleib, damit man die verbliebenen Zahlen im Array nicht überschreibt

		while (k&lt;j &amp;&amp; j&lt;=hi)
		{
			if (b[i]&lt;=a[j])
			{
				a[k] = b[i];
				k++; i++;
			}
			else
			{
				a[k]=a[j];
				k++; j++;
			}

		}

		while (k&lt;j)
		{
			a[k] = b[i];
			k++; i++;
		}

	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1210697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210697</guid><dc:creator><![CDATA[jippel]]></dc:creator><pubDate>Wed, 17 Jan 2007 01:52:06 GMT</pubDate></item></channel></rss>