<?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[qsort frage]]></title><description><![CDATA[<p>Hallo ich möchte gerne qsort verstehen, dazu habe ich mir einen <a href="http://www.algorithm-code.com/wiki/Quick_Sort#C.2B.2B_Code" rel="nofollow">Code</a> gesucht.</p>
<p>Jetzt würde mich aber interessieren wo dort ein Compare statt findet, also wenn ich eine extra Compare-Funktion einbauen möchte, wo muss ich die dann einbauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238298/qsort-frage</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 17:34:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238298.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Apr 2009 21:21:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:21:43 GMT]]></title><description><![CDATA[<p>Hallo ich möchte gerne qsort verstehen, dazu habe ich mir einen <a href="http://www.algorithm-code.com/wiki/Quick_Sort#C.2B.2B_Code" rel="nofollow">Code</a> gesucht.</p>
<p>Jetzt würde mich aber interessieren wo dort ein Compare statt findet, also wenn ich eine extra Compare-Funktion einbauen möchte, wo muss ich die dann einbauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693152</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:25:25 GMT]]></title><description><![CDATA[<p>In C++ benutzt man eher die STL, also <a href="http://www.cplusplus.com/reference/algorithm/sort/" rel="nofollow">std::sort()</a>. Auf der verlinkten Seite ist auch ein Beispielcode zu sehen.</p>
<p><em>Edit: Oh, ich hab deinen Post so verstanden, als würde es sich um die C-Funktion <code>qsort()</code> handeln. Tut mir leid, falls das ein Missverständnis war...</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693153</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:26:56 GMT]]></title><description><![CDATA[<p>Ich möchte gerne später ein eigenes qsort in einer eignen Klasse benutzen, aber zum einbau muss ich es ja erstmal verstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693155</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:29:43 GMT]]></title><description><![CDATA[<p>Und was spricht gegen std::sort()??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693157</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:31:56 GMT]]></title><description><![CDATA[<p>Weil ich keine vectoren, sondern eine verkettete liste sortieren möchte.<br />
Außerdem soll meine Sortfunktion eine zusatzklasse zum einstellen von sortierparametern bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693159</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:34:17 GMT]]></title><description><![CDATA[<p>Kann std::sort alles.Schau dir den Link von Nexus an.Du übergibst einfach Iteratoren <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/1693161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693161</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:34:17 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:37:42 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Kann std::sort alles.Schau dir den Link von Nexus an.Du übergibst einfach Iteratoren <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>Stimmt nicht ganz, <code>std::sort()</code> und <code>std::stable_sort()</code> funktionieren nur mit Random-Access-Iteratoren. Für Listen kann man <code>std::list::sort()</code> nehmen.</p>
<p>lord_fritte schrieb:</p>
<blockquote>
<p>Außerdem soll meine Sortfunktion eine zusatzklasse zum einstellen von sortierparametern bekommen.</p>
</blockquote>
<p>Das sollte gut mit Funktoren möglich sein, die du der Sortierfunktion übergibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693163</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:37:42 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:38:42 GMT]]></title><description><![CDATA[<p>Wofür Iteratoren... mein tut es auch super, ich brauche nur noch ein laufendes qsort und alles ist perfekt..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693164</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:38:56 GMT]]></title><description><![CDATA[<p>Sorry Nexus, ich bin zu der Uhrzeit wo du richtig Wach wirst, nicht mehr ganz auf der Höhe, natürlich nur RandomAccess, hab sogra die Referenz vor und hab Mist erzählt, nimms mir nicht übel <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/1693165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693165</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:38:56 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 21:44:04 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Wofür Iteratoren... mein tut es auch super, ich brauche nur noch ein laufendes qsort und alles ist perfekt..</p>
</blockquote>
<p>Selber schreiben ist nicht empfehlenswert, wenn es die Funktionalität bereits in der Standardbibliothek gibt. Die STL ist recht gut auf Performance optimiert und prüft auch alles Mögliche mit Assertions. Und wozu das Rad neu erfinden und es mit hoher Wahrscheinlichkeit schlechter machen, wenn es schon eine fertige Funktion dafür gibt?</p>
<p>Du musst nichts mit Iteratoren machen, ruf einfach <code>std::list::sort()</code> auf. Je nach Wunsch mit Vergleichsprädikat. Mehr dazu <a href="http://www.cplusplus.com/reference/stl/list/sort/" rel="nofollow">hier</a>...</p>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Sorry Nexus, ich bin zu der Uhrzeit wo du richtig Wach wirst, nicht mehr ganz auf der Höhe, natürlich nur RandomAccess, hab sogra die Referenz vor und hab Mist erzählt, nimms mir nicht übel <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>
</blockquote>
<p>Aber nein, ist doch kein Problem... <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/1693169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693169</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 21:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 22:02:21 GMT]]></title><description><![CDATA[<p>Aber mit Iteratoren kann man doch keinen direkten zugriff([]) durchführen..<br />
Und ich teste gleich mal mit dem QueryPerformanceCount wie die Geschwindigkeit aussieht.</p>
<p>Also beim einfügen von 10.000 Elementen ist meine Klasse schonmal 20 ms schneller, direkten zugriff kann ich ja nicht testen, das gibt es ja nicht bei std::list nicht....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693170</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 22:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 22:03:35 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Aber mit Iteratoren kann man doch keinen direkten zugriff([]) durchführen..</p>
</blockquote>
<p>Kann man bei verketteten Listen eh nicht...</p>
<p>lord_fritte schrieb:</p>
<blockquote>
<p>Also beim einfügen von 10.000 Elementen ist meine Klasse schonmal 20 ms schneller, direkten zugriff kann ich ja nicht testen, das gibt es ja nicht bei std::list nicht....</p>
</blockquote>
<p>Hm, wie hast du es genau versucht? Und du hast eine eigene Listenklasse, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693175</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 22:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 22:08:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Kann man bei verketteten Listen eh nicht...</p>
</blockquote>
<p>Das habe ich bei meiner Klasse eingebaut.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Hm, wie hast du es genau versucht? Und du hast eine eigene Listenklasse, oder?</p>
</blockquote>
<p>Ja und bisher läuft alles super.</p>
<p>ich teste das so:</p>
<pre><code class="language-cpp">void ListBench2()
{
	double time1 = 0.0;
	double time2 = 0.0;

	MyList&lt;int&gt; myList;
	list&lt;int&gt; yourList;

	srand(time(NULL));

	printf(&quot;Liste fuellen mit &quot;);
	for(int x = 0; x &lt; 10000; x++)
	{
		int zahl = rand();
		HiPerCounter counter1;
		HiPerCounter counter2;

		counter1.Start();
		myList.Add(zahl);
		counter1.Stop();
		time1 += counter1.GetTime();

		counter2.Start();
		yourList.push_back(zahl);
		counter2.Stop();
		time2 += counter2.GetTime();
	}
	printf(&quot;%d Elementen.\n&quot;, myList.Count());
	printf(&quot;%lf sec's MyList\n\n&quot;, time1);
	printf(&quot;%lf sec's list\n&quot;, time2);

	time1 = 0.0;
	time2 = 0.0;
	printf(&quot;Leeren der Liste:\n&quot;);
	HiPerCounter counter1;
	HiPerCounter counter2;
	counter1.Start();
	myList.Clear();
	counter1.Stop();
	time1 = counter1.GetTime();

	counter2.Start();
	yourList.clear();
	counter2.Stop();
	time2 = counter2.GetTime();

	printf(&quot;%lf sec's MyList\n\n&quot;, time1);
	printf(&quot;%lf sec's list\n&quot;, time2);
}
</code></pre>
<p>und der Counter arbeitet korrekt, das ahbe ich auch schon geteste, mit sleep.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693177</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 22:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 22:14:21 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Das habe ich bei meiner Klasse eingebaut.</p>
</blockquote>
<p>Mit linearer Zeitkomplexität? Keine gute Idee. Das ist auch der Grund, warum <code>std::list</code> das nicht bietet. Hier wären Iteratoren die bessere Wahl...</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>ich teste das so:</p>
</blockquote>
<p>Arbeitest du im Release-Modus mit eingeschalteten Optimierungen und deaktivierter Debug-Laufzeitumgebung? Und falls du MSVC++ verwendest: hast du das Makro <code>_SECURE_SCL</code> mit 0 definiert?</p>
<p>Und hast du auch die Reihenfolge der beiden Listen vertauscht und viele Durchgänge gestartet? Nebendran keine Programme am Laufen? Einigermassen stabile Rechenleistung? Profiling kann von sehr vielen Faktoren abhängen, deshalb würde ich mit voreiligen Schlüssen etwas warten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693181</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 22:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 22:20:43 GMT]]></title><description><![CDATA[<p>hmm aber er misst doch nur immer wieder den Add vorgang, aber was bringt mir eine Liste in der ich Daten speichere wenn ich keinen direkten Zugriff auf die Elemente habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693185</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 08 Apr 2009 22:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Wed, 08 Apr 2009 23:14:19 GMT]]></title><description><![CDATA[<p>Direkten Zugriff hast du sowieso nie. Entweder du gehst über einen <code>operator []</code> oder über Iteratoren.</p>
<p>Übrigens hat Nexus Recht. Es ist eher unwahrscheinlich, dass du in der Lage warst eine performantere Liste zu programmieren, als die über Jahre hinweg optimierte std::list. Die Container in der Standard-Library beim MSVC haben noch Laufzeitüberprüfungen, die man zur Not abschalten kann. Eigentlich sind sie aber recht sinnvoll und auch hilfreich. Deine Laufzeitmessung solltest du auch noch einmal überdenken. Miss die Laufzeit von 10.000 push_back()s und nicht von jeweils einem und addiere die Ergebnisse.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693198</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Wed, 08 Apr 2009 23:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 01:01:50 GMT]]></title><description><![CDATA[<p>man kann eine verkettete liste nicht mit quicksort sortieren. für die neu-zuordnung des 'next-zeigers' etc ist qsort nicht vorgesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693211</guid><dc:creator><![CDATA[_x_]]></dc:creator><pubDate>Thu, 09 Apr 2009 01:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 01:07:26 GMT]]></title><description><![CDATA[<p>nachtrag:<br />
für verkettete listen, nimmt man 'sortieren durch einfügen' bzw. insertion sort.<br />
ist das gleiche in grün, nur auf englisch.<br />
guckst du:<br />
<a href="http://moritz.faui2k3.org/de/dmisc/einfach-verkettete-listen" rel="nofollow">http://moritz.faui2k3.org/de/dmisc/einfach-verkettete-listen</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693212</guid><dc:creator><![CDATA[_x_]]></dc:creator><pubDate>Thu, 09 Apr 2009 01:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 07:00:07 GMT]]></title><description><![CDATA[<p>Guck Dir vielleicht auch mal <a href="http://www.youtube.com/watch?v=vxENKlcs2Tw" rel="nofollow">diesen</a> Animationsfilm an. Der erklärt recht anschaulich Quicksort und Bubblesort im Vergleich (wurde vor kurzem mal im ANSI-C-Forum gepostet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693257</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 09 Apr 2009 07:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 18:38:29 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>hmm aber er misst doch nur immer wieder den Add vorgang, aber was bringt mir eine Liste in der ich Daten speichere wenn ich keinen direkten Zugriff auf die Elemente habe?</p>
</blockquote>
<p>Wenn du direkten Zugriff (Random Access) willst - d.h. du möchtest auf das 153. Element zugreifen, ist eine verkettete Liste die falsche Datenstruktur. Falls du den <code>operator[]</code> nachbauen willst, hast du O(n) - du musst 152 Mal ein Element weitergehen, bevor du das gesuchte Element hast. Nun stell dir eine Liste mit 25 Millionen Einträgen vor und du willst auf das 24-millionste Element zugreifen. Nicht gerade optimal.</p>
<p>Deshalb gibt es Iteratoren. Die kannst du dir wie Zeiger vorstellen, die auf jeweils ein Element zeigen. Du kannst sie vorrücken, um an das nächste Element zu gelangen. Das ist vor allem sinnvoll, wenn du für alle Elemente der Liste etwas tun willst, und nicht ein einzelnes.</p>
<p>Ansonsten - im Fall, dass du Random Access brauchst - nimm eine array-ähnliche Datenstruktur. In der Standardbibliothek wären das <code>std::vector</code> und <code>std::deque</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693675</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Apr 2009 18:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:14:33 GMT]]></title><description><![CDATA[<p><em>x</em> schrieb:</p>
<blockquote>
<p>man kann eine verkettete liste nicht mit quicksort sortieren. für die neu-zuordnung des 'next-zeigers' etc ist qsort nicht vorgesehen.</p>
</blockquote>
<p>Dessswegen ja ein eignes qsort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>lord_fritte schrieb:</p>
<blockquote>
<p>hmm aber er misst doch nur immer wieder den Add vorgang, aber was bringt mir eine Liste in der ich Daten speichere wenn ich keinen direkten Zugriff auf die Elemente habe?</p>
</blockquote>
<p>Wenn du direkten Zugriff (Random Access) willst - d.h. du möchtest auf das 153. Element zugreifen, ist eine verkettete Liste die falsche Datenstruktur. Falls du den <code>operator[]</code> nachbauen willst, hast du O(n) - du musst 152 Mal ein Element weitergehen, bevor du das gesuchte Element hast. Nun stell dir eine Liste mit 25 Millionen Einträgen vor und du willst auf das 24-millionste Element zugreifen. Nicht gerade optimal.</p>
<p>Deshalb gibt es Iteratoren. Die kannst du dir wie Zeiger vorstellen, die auf jeweils ein Element zeigen. Du kannst sie vorrücken, um an das nächste Element zu gelangen. Das ist vor allem sinnvoll, wenn du für alle Elemente der Liste etwas tun willst, und nicht ein einzelnes.</p>
<p>Ansonsten - im Fall, dass du Random Access brauchst - nimm eine array-ähnliche Datenstruktur. In der Standardbibliothek wären das <code>std::vector</code> und <code>std::deque</code> .</p>
</blockquote>
<p>Aber das selbe habe ich bei einem Iterator doch auch... wenn ich an das Element 150 will, muss ich 150 nal durch alle Elementer gehen...</p>
<p>Nur ich habe eine doppelverkette Liste, ich teile diese Virtuell in der mitte.<br />
Z.b. n Elemente, ich möchte an Element x, dann überprüfe ich:<br />
x &lt; n/2: laufe ich von vorne durch,<br />
x &gt; n/2: laufe ich von hinten durch.<br />
Und jetzt erzählt mir nicht dass eine eine einfache if abfrage 100.000 ms braucht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693698</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:24:42 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Nur ich habe eine doppelverkette Liste, ich teile diese Virtuell in der mitte.<br />
Z.b. n Elemente, ich möchte an Element x, dann überprüfe ich:<br />
x &lt; n/2: laufe ich von vorne durch,<br />
x &gt; n/2: laufe ich von hinten durch.<br />
Und jetzt erzählt mir nicht dass eine eine einfache if abfrage 100.000 ms braucht...</p>
</blockquote>
<p>und jz rate mal, welche Laufzeit den op[] jz hat? richtig - O(n)<br />
mal davon abgesehen, dass man (mit an sicherheit grenzender wahrscheinlichkeit), wenn man den op[] bei einer list braucht, eh den falschen container verwendet hat...</p>
<p>und wieso meinst du, dass dein qsort dann schneller ist, als das std::list::sort ist? Oo<br />
und wenn du ne list geordnet haben möchtest, dann gibt es auch wieder andere container...<br />
du hast iwie scheinbar nicht verstanden, dass jeder container nur bestimmte anwendungsgebiete besitzt...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693705</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:24:42 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:30:44 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Aber das selbe habe ich bei einem Iterator doch auch... wenn ich an das Element 150 will, muss ich 150 nal durch alle Elementer gehen...</p>
</blockquote>
<p>Ja. Iteratoren verbessern deinen Index-Zugriff aber trotzdem, weil du beim Durchiterieren aller Elemente quadratische zu linearer Zeitkomplexität reduzieren kannst. Das Problem des Random Access ist bei Listen unumgänglich - aber zum Glück gibt es auch noch andere Datenstrukturen.</p>
<p>Dein <code>operator[]</code> braucht etwa n Rechenschritte, wenn du auf das n-te Element zugreifen willst. Möchtest du nun durchiterieren, greifst du auf jedes Element vom ersten bis zum letzten in der Liste zu - bei m Elementen also m-mal. Jeder dieser Zugriffe benötigt aber wiederum n Schritte. Das führt dazu, dass die Anzahl totalen Rechenschritte quadratisch von der Listengrösse abhängt, was sehr ineffizient ist.</p>
<p>Der Iterator hingegen benötigt nur m-mal für das Durchiterieren, da er jedes Mal direkt weitergesetzt werden kann. Also hast du eine lineare Abhängigkeit.</p>
<p>lord_fritte schrieb:</p>
<blockquote>
<p>Nur ich habe eine doppelverkette Liste, ich teile diese Virtuell in der mitte.</p>
</blockquote>
<p>Wie willst du die Mitte treffen, wenn du keinen Random Access hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693708</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:32:06 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>lord_fritte schrieb:</p>
<blockquote>
<p>Nur ich habe eine doppelverkette Liste, ich teile diese Virtuell in der mitte.</p>
</blockquote>
<p>Wie willst du die Mitte treffen, wenn du keinen Random Access hast?</p>
</blockquote>
<p>lies seinen post ma noch ma - er meinte es anders ^^<br />
er hats net wirklich getrennt, aber er speichert die länge noch extra mit und pürft dann halt, von welcher seite er anfangen muss, zu suchen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693711</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:34:45 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>lies seinen post ma noch ma - er meinte es anders ^^</p>
</blockquote>
<p>Stimmt, sorry. Das Problem der Ineffizienz bleibt trotzdem. Und ineffiziente Sortieralgorithmen sind nicht gut. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1693713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693713</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to qsort frage on Thu, 09 Apr 2009 19:44:41 GMT]]></title><description><![CDATA[<p><em>x</em> schrieb:</p>
<blockquote>
<p>man kann eine verkettete liste nicht mit quicksort sortieren. für die neu-zuordnung des 'next-zeigers' etc ist qsort nicht vorgesehen.</p>
</blockquote>
<p>man kann nur nicht die liste als array anschauen und es mit dem array-quicksort machen. (ok, man kann, aber das wird asozial lahm).</p>
<p>quicksort auf listen ist enorm nett und wie dafür gemacht. der einfachheit halber nehme ich eine queue.</p>
<pre><code>void quicksort(queue &amp;q)
  pivot=q.pop();
  queue left,right;
  while not q.empty
    i=q.pop
    if i&lt;pivot
      left.push i
    else
      right.push i
  qsort left
  qsort right
  q.appendAndDestroy left
  q.appendAndDestroy right
</code></pre>
<p>die abbruchbedingung für leere oder kleine listen sowie die logarithmische beschränkung der rekursion hab ich mal weggelassen. außerdem denke ich dran, nicht elemente anzufassen, sondern knoten umzuketten. appendAndDestroy ist auch nur eine umkettung. und es läßt sich leicht auf FIFO-listen umnauen, da muß man halöt nur drauf achten, daß in jeder rekursionsvertiefung sich die richtung ändert.<br />
quicksort geht also mit verkettetren listen und ist darüberhinaus sogar asymptotisch genauso effizient, wie quicksort auf arrays.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693715</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 09 Apr 2009 19:44:41 GMT</pubDate></item></channel></rss>