<?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[Frage zum Quicksort]]></title><description><![CDATA[<p>Hi Luete!</p>
<p>Wie ihr unten seht, hab ich eine korrekte Implementierung eines Teils des Quicksort-Algos. Ich hab in meiner main eine Folge von 10 willkürlichen Zahlen angegeben, die ich nun mit diesem Algo sortieren lassen möchte. Meine Aufgabe ist es nun, das Pivotelement (oder Trennelement) zufällig auszuwählen und nicht in Abhängigkeit von &quot;f&quot; (first, erstes Element in der Zahlenfolge) zu wählen.<br />
Damit dies nun zufällig funktioniert, hab ich mir in der main einen random seed gesetzt den ich modulo 9 (für Zahlen von 0 bis 9) und rufe diesen in der 4. Zeile des Codes unten als Adressierung des Arrays auf.<br />
Ich hab nun gedacht, dass dies schon alles war, leider sortiert er mir jetzt nicht mehr richtig und ich sehe nicht so wirklich, was da nun fehlt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Ich weiß, dass dies so zu keiner effizienten Implementierung führen wird; ist mir aber egal, da es eine Übung sein soll!</p>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	int pivot = a[(rand() % 9)];
	p = f-1;

	for(int i = f; i&lt;=l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/315960/frage-zum-quicksort</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 09:36:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315960.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Apr 2013 13:45:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 13:45:00 GMT]]></title><description><![CDATA[<p>Hi Luete!</p>
<p>Wie ihr unten seht, hab ich eine korrekte Implementierung eines Teils des Quicksort-Algos. Ich hab in meiner main eine Folge von 10 willkürlichen Zahlen angegeben, die ich nun mit diesem Algo sortieren lassen möchte. Meine Aufgabe ist es nun, das Pivotelement (oder Trennelement) zufällig auszuwählen und nicht in Abhängigkeit von &quot;f&quot; (first, erstes Element in der Zahlenfolge) zu wählen.<br />
Damit dies nun zufällig funktioniert, hab ich mir in der main einen random seed gesetzt den ich modulo 9 (für Zahlen von 0 bis 9) und rufe diesen in der 4. Zeile des Codes unten als Adressierung des Arrays auf.<br />
Ich hab nun gedacht, dass dies schon alles war, leider sortiert er mir jetzt nicht mehr richtig und ich sehe nicht so wirklich, was da nun fehlt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Ich weiß, dass dies so zu keiner effizienten Implementierung führen wird; ist mir aber egal, da es eine Übung sein soll!</p>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	int pivot = a[(rand() % 9)];
	p = f-1;

	for(int i = f; i&lt;=l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2316209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316209</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 13:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 13:50:09 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Damit dies nun zufällig funktioniert, hab ich mir in der main einen random seed gesetzt den ich modulo 9 (für Zahlen von 0 bis 9)</p>
</blockquote>
<p>Wieso 0 bis 9? Wieso nicht ein Wert <strong>aus</strong> der zu sortierenden Menge?</p>
<p>Denk nochmal ganz gründlich nach, wie Quicksort funktioniert und welche Bedeutung das Pivot hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316212</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 13:50:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:01:00 GMT]]></title><description><![CDATA[<p>Ich wähle ja mit dem rand() und modulo nur die Adressierung aus die auf Grund des beschränkten Arrays von 10 Elementen (also 0 bis 9) so dann den echten Wert aus der &quot;zufällig&quot; ausgewählten Stelle der Pivot-Variabel zuweist.</p>
<p>Was ist da jetzt falsch an meiner Überlegung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316217</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:07:30 GMT]]></title><description><![CDATA[<p>Ahhhh!</p>
<p>Jetzt glaub ich weiß ich worauf du hinaus wolltest! Da ich 10 Werte habe, und der Quicksort ja ein Divide&amp;Conquer Algo ist, darf ich als Adressierung nur die Hälfte, also von 0 bis 5 wählen! Richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316218</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:12:33 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Was ist da jetzt falsch an meiner Überlegung?</p>
</blockquote>
<p>Na, die 0 bis 9, wie ich schon sagte. Guck dir nochmal an, wie Quicksort funktioniert. Das bringt schließlich nichts, wenn ich dir jetzt einfach die Lösung sage. Schreib auch mal zu allen deinen einbuchstabigen Variablennamen genau auf, was sie bedeuten.</p>
<p>bandchef schrieb:</p>
<blockquote>
<p>Jetzt glaub ich weiß ich worauf du hinaus wolltest! Da ich 10 Werte habe, und der Quicksort ja ein Divide&amp;Conquer Algo ist</p>
</blockquote>
<p>JA! Und daraus folgt?</p>
<blockquote>
<p>, darf ich als Adressierung nur die Hälfte, also von 0 bis 5 wählen! Richtig?</p>
</blockquote>
<p><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="😮"
    /><br />
Das hätte ich jetzt nicht als Folgerung erwartet.</p>
<p>Hast du schon einmal einem Baby zugesehen, das Laufen lernt? Erst sieht alles richtig aus und dann fällt es ohne ersichtlichen Grund voll auf die Fresse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316221</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:09:33 GMT]]></title><description><![CDATA[<p>Ich glaub da hat sich jetzt was überschnitten...</p>
<p>Leider funktioniert meine Idee so auch nicht. Hier nochmal der Code:</p>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	int pivot = a[(rand() % 5)];
	//int pivot = a[f];
	p = f-1;

	for(int i = f; i&lt;=l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2316222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316222</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:10:01 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Ich glaub da hat sich jetzt was überschnitten...</p>
</blockquote>
<p>Habe oben noch eine Antwort reineditiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316223</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:14:20 GMT]]></title><description><![CDATA[<blockquote>
<p>Hast du schon einmal einem Baby zugesehen, das Laufen lernt? Erst sieht alles richtig aus und dann fällt es voll auf die Fresse</p>
</blockquote>
<p>Das hier empfinde ich grad als Frechheit. Ich teile leider keinen Nerd-Humor. Aber gut. Wenn du der Meinung bist. Deine Aussage soll jetzt von meiner Seite aus der Zusammenarbeit keinen Abbruch tun.</p>
<p>Meine Aussage ist also richtig, dass das ein Divide&amp;Conquer Algo ist. So ein Algo teil sich immer weiter auf, bis die Element elementar werden und quasi &quot;sortiert&quot; sind.</p>
<p>Ich erwarte jetzt keine Lösung der Aufgabe sondern, würde ich dich nun bitten, etwas gezielter nach zu helfen? Hat also rand()%9 doch gestimmt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316224</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:17:54 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Ich erwarte jetzt keine Lösung der Aufgabe sondern, würde ich dich nun bitten, etwas gezielter nach zu helfen?</p>
</blockquote>
<p>Was soll ich denn sonst noch sagen? Du musst schon mitdenken. Zum Beispiel hast du</p>
<blockquote>
<p>Schreib auch mal zu allen deinen einbuchstabigen Variablennamen genau auf, was sie bedeuten.</p>
</blockquote>
<p>nicht gemacht, obwohl du deinen eigenen Code anscheinend nicht verstehst.</p>
<p>Wie kommst du von</p>
<blockquote>
<p>So ein Algo teil sich immer weiter auf, bis die Element elementar werden und quasi &quot;sortiert&quot; sind.</p>
</blockquote>
<p>auf 9 oder 5?</p>
<blockquote>
<p>Hat also rand()%9 doch gestimmt?</p>
</blockquote>
<p>Ja, bestimmt. Schließlich war es nur mein allererster Hinweis, was nicht stimmt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316225</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:25:10 GMT]]></title><description><![CDATA[<p>Entschuldige Bitte. Die Aufgabe hab ich überlesen in meinem Eifer.</p>
<p>f = first element, l = last element, a[] = Zahlenfolge, p = Part, pivot sollte klar sein.</p>
<p>swap() ist eine Funktion die die Elemente durchtauscht.</p>
<p>Naja pro rekursivem Aufruf wird's eben immer kleiner. 10 wird in der Mitte geteilt, dann hat man zwei rays à 5 Elemente. Dann werden die zwei aufgeteilt. In bspw. 2 und 3 usw usf.</p>
<p>Ich hab mir nun nochmal Ggedanken gemacht:</p>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	int index = f + rand() % (l-f+1);
	int pivot = a[index];
	//int pivot = a[f];
	p = f-1;

	for(int i = f; i&lt;=l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2316228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316228</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:43:50 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Naja pro rekursivem Aufruf wird's eben immer kleiner. 10 wird in der Mitte geteilt, dann hat man zwei rays à 5 Elemente. Dann werden die zwei aufgeteilt. In bspw. 2 und 3 usw usf.</p>
</blockquote>
<p>Fast. Der genaue Algorithmus stimmt zwar nicht (guck dir doch bitte nochmal die Rolle des Pivot an!), aber wir stellen schon einmal fest, der Bereich wird immer kleiner. Mit dieser Beschreibung und meinen vorherigen Hinweisen, dass dies irgendwie mit der Wahl der Pivots zu tun haben könnte, was schlussfolgerst du nun daraus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316229</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:34:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Naja pro rekursivem Aufruf wird's eben immer kleiner. 10 wird in der Mitte geteilt, dann hat man zwei rays à 5 Elemente. Dann werden die zwei aufgeteilt. In bspw. 2 und 3 usw usf.</p>
</blockquote>
<p>Denkfehler!</p>
<p>Sepp, vllt. solltest du deinen Beitrag noch mal editieren, denn das &quot;Genau&quot; stimmt eben nicht (ok, der erste Satz von bandchef stimmt, aber die beiden anderen nicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316230</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:27:10 GMT]]></title><description><![CDATA[<p>Dass ich die Modulorechnung pro rekursivem Aufruf irgendwie anpassen müsste. Im ersten Aufruf tut's %5. Im zweiten kann ich mich dann entscheiden ob %3 oder %4.</p>
<p>Richtig oder auch wieder vorbei?</p>
<p>Hab grad noch einen Code editiert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316232</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:27:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:45:36 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>Im zweiten kann ich mich dann entscheiden ob %3 oder %4.</p>
</blockquote>
<p>Wie viele Elemente hast du denn zu sortieren?</p>
<blockquote>
<p>Sepp, vllt. solltest du deinen Beitrag noch mal editieren, denn das &quot;Genau&quot; stimmt eben nicht (ok, der erste Satz von bandchef stimmt, aber die beiden anderen nicht).</p>
</blockquote>
<p>Gemacht. Ich war schon glücklich, dass überhaupt erkannt wurde, dass der Algorithmus rekursiv auf immer weniger Daten arbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316236</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:51:35 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie viele Elemente hast du denn zu sortieren?</p>
</blockquote>
<p>Ich hab 10 Werte zu sortieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316240</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:58:26 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<blockquote>
<p>Wie viele Elemente hast du denn zu sortieren?</p>
</blockquote>
<p>Ich hab 10 Werte zu sortieren!</p>
</blockquote>
<p>Tut mir leid, ich geb's auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316244</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:58:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 14:59:42 GMT]]></title><description><![CDATA[<p>Na dann! Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316245</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 14:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 15:17:34 GMT]]></title><description><![CDATA[<p>Das war eine rhetorische Antwort. Kann man mir nicht trotzdem weiter helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316252</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Wed, 17 Apr 2013 15:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Wed, 17 Apr 2013 16:27:28 GMT]]></title><description><![CDATA[<p>Wie viele Werte hast du pro Aufruf deiner PreparePartition()-Funktion zu sortieren? Tipp: Parameter beachten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316280</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 17 Apr 2013 16:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Thu, 18 Apr 2013 10:10:44 GMT]]></title><description><![CDATA[<p>Ich gehe mal davon aus, dass du die beiden Parameter f und l meinst, oder? f=0 und l=9. Ich hab mir noch weiter Gedanken gemacht und dabei darauf gestoßen, dass ich wohl, dass als Index verwendete f gleich dem rand() % 9 setzen sollte. Das sieht dann so aus:</p>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	//f = f + rand() % (l-f+1);
	int f = rand() % 9;
	int pivot = a[f];
	//int pivot = a[f];
	p = f-1;

	for(int i = f; i &lt;= l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}
</code></pre>
<p>Komischerweise geht das dann noch immer nicht. Was ich auch nicht so ganz verstehe, ist, dass wenn ich das Programm ein paar Mal hintereinander starte, die Sortierung immer wieder mal sporadisch funktioniert! Ich gehe mal davon aus, dass das zufälligen Zahlen geschuldet ist. Immer wenn die Random-Funktion 0 berechnet ist es ja der Wert mit dem der Algorithmus standardmäßig funktioniert.</p>
<p>Das Problem welches ich damit noch immer hab, löst es aber leider trotzdem nicht.</p>
<p>Edit:</p>
<p>Die Funktion drunter ist die rekursiv aufrufende Funktion:</p>
<pre><code>void Quicksort(int a[], int f, int l)
{
	int part;
	if(f &lt; l)
	{
		PreparePartition(a,f,l,part);
		Quicksort(a,f,part-1);
		Quicksort(a,part+1,l);
	}
}
</code></pre>
<p>Kann es sein, dass die ganze Sache nicht funktioniert, weil ich das f mit den Randomzahlen vor dem rekursiven Aufruf berechnen lassen muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316442</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Thu, 18 Apr 2013 10:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Thu, 18 Apr 2013 14:25:44 GMT]]></title><description><![CDATA[<p>So, ich bin's jetzt Leid - hier die Lösung:</p>
<pre><code class="language-cpp">void PreparePartition(int a[], int f, int l, int &amp;p)
{
    //Pivot-Element
    int range = l - f + 1;
    int rnd = rand() % range;
    int pivot = a[f+rnd];

    // ...
}
</code></pre>
<p>Ich hoffe, du verstehst es wenigstens!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316534</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 18 Apr 2013 14:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Fri, 19 Apr 2013 07:05:32 GMT]]></title><description><![CDATA[<p>Danke! Jetzt weiß ich was ich bei meinem Beispiel vor ein paar Einträgen falsch gemacht habe. Ich habe einen änlichen Ansatz mal hier vorgestellt aber nicht erkannt, dass ich die Modulo-Rechnung in Abhängigkeit last und first Element machen muss!</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316685</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Fri, 19 Apr 2013 07:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Fri, 19 Apr 2013 15:26:02 GMT]]></title><description><![CDATA[<p>Ich muss leider enttäuschen. Ich hab zwar so wie du gedacht, dass es so funtionieren könnte, aber es tut's leider nicht. Ich hab das jetzt in meiner Implementierung ausprobiert, aber es funktioniert nicht. Ich werde jetzt mal alles posten:</p>
<pre><code>void swap(int &amp;a, int &amp;b)
{
	int h = b;
	b = a;
	a = h;
}

void PreparePartition(int a[], int f, int l, int &amp;p)
{
	//Pivot-Element
	int range = l - f + 1;
	int rnd = rand() % range;
	int pivot = a[f + rnd];
	p = f-1;

	for(int i = f; i &lt;= l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
		}
	}

	//Pivot an die richtige Stelle
	swap(a[f], a[p]);
}

void Quicksort(int a[], int f, int l)
{
	int part;

	if(f &lt; l)
	{
		PreparePartition(a,f,l,part);
		Quicksort(a,f,part-1);
		Quicksort(a,part+1,l);
	}
}
</code></pre>
<p>Aufrufen tu ich die Funktion Quicksort() aus der main mit l=9 und f=0 soweit einem 10-elementige int-Array...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316828</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Fri, 19 Apr 2013 15:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Fri, 19 Apr 2013 17:51:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Pivot an die richtige Stelle
swap(a[f], a[p]);
</code></pre>
<p>Siehst du es?</p>
<p>Edit: am besten, du führst es im Debugger Schritt für Schritt durch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316852</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 19 Apr 2013 17:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Sat, 20 Apr 2013 15:02:18 GMT]]></title><description><![CDATA[<pre><code>//Pivot an die richtige Stelle
swap(a[f+rnd], a[p]);
</code></pre>
<p>Wenn ich nun den Code so abwandle geht's noch immer nicht. Ich hab nun einige Rekursionen durchkompiliert aber ich finde den Fehler nicht. Langsam ist's auch bei mir mit der Geduld vorbei <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317019</guid><dc:creator><![CDATA[bandchef]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Quicksort on Sun, 21 Apr 2013 09:32:09 GMT]]></title><description><![CDATA[<p>bandchef schrieb:</p>
<blockquote>
<p>[...] aber ich finde den Fehler nicht. Langsam ist's auch bei mir mit der Geduld vorbei <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
</blockquote>
<p>Ganz schlechte Ausgangsposition, wenn man programmieren will... Wenn's mit Probieren nicht klappt (meistens nicht), dann nur mit Untersuchen. Genau das wurde Dir ja schon mehrfach gesagt. Also:</p>
<p>Du hast ja ein 10-stelliges Test-Array mit (hoffentlich) fixen Test-Daten. Das ist noch übersichtlich.</p>
<p>Male das Ganze doch mal auf ein Blatt Papier mit den selben Werten auf und simuliere dann Schritt für Schritt von Hand, was das Programm tun <em>sollte</em>. Dann gehst Du mit dem Debugger her und führst es am Rechner Schritt für Schritt aus, beobachtest die Variablen und schaust, was es tatsächlich <em>tut</em>. Irgendwo zeigt sich, ob der Fehler im Design oder in der Implementierung liegt.</p>
<p>Ähnlich wie die hier: <a href="http://de.wikipedia.org/wiki/Quicksort#Beispiel_teile.28links.2C_rechts.29" rel="nofollow">http://de.wikipedia.org/wiki/Quicksort#Beispiel_teile.28links.2C_rechts.29</a></p>
<p>Ohne Deinen Code jetzt in Gänze zu durchdenken, fällt mir auf den ersten Blick etwas auf:</p>
<p>bandchef schrieb:</p>
<blockquote>
<pre><code>void PreparePartition(int a[], int f, int l, int &amp;p)
{
    /* ... */
	int pivot = a[f + rnd];
	p = f-1;

	for(int i = f; i &lt;= l; i++)
	{
		if(a[i] &lt;= pivot)
		{
			p++;
			swap(a[i], a[p]);
</code></pre>
</blockquote>
<p>Wenn <code>PreparePartition()</code> mit <code>f=0</code> aufgerufen wird und das Element <code>a[0]</code> kleiner oder gleich das Pivot-Element ist, was macht dann das swap? Irgendwie seltsam überflüssig, oder nicht? Zumindest nicht der performanteste Ansatz und ziemlich sicher (wie gesagt, ich hab's nicht komplett durchdacht) ein Hinweis auf einen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317111</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sun, 21 Apr 2013 09:32:09 GMT</pubDate></item></channel></rss>