<?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[quicksort - logikproblem]]></title><description><![CDATA[<p>Hey,</p>
<p>ich habe mir einen quicksort geschrieben der das Pivot am Ende des Arrays hat :</p>
<pre><code class="language-cpp">public void quicky(int anfang,int ende) {
		int pivot = ende - 1;
		int klei = pivot - 1;
		int gro = anfang;

		if(klei &gt;= gro) {
			while(klei &gt; gro) {
				while(gro != klei &amp;&amp; zahlen[gro] &lt;= zahlen[pivot]) {
					++gro;
				}

				while(gro != klei &amp;&amp; zahlen[klei] &gt; zahlen[gro]) {
					--klei;
				}

				tausche(gro,klei);
			}

			if(zahlen[pivot] &lt; zahlen[gro]) {
				tausche(pivot,gro);
			} else {
				gro = pivot;
			}

			quicky(gro + 1,ende);
			quicky(anfang,gro);
		}
	}
</code></pre>
<p>Nun will ich aber das das Pivot am Anfang ist, und habe mir gedacht das es eiegntlich nur 4 stellen gibt wo ich was ändern muss:</p>
<pre><code class="language-cpp">public void quicky(int anfang,int ende) {
		int pivot = anfang;  //1. Hier muss das Pivot auf den Anfang gesetzt werden
		int klei = ende - 1; //2.Hier angleichen damit man noch im array bleibt
		int gro = anfang + 1;  //3. Hier den (nach größeren) suchenden index einen nach rechts verschieben, da er ja sonst auf das pivot zeigen würde

		if(klei &gt;= gro) {
			while(klei &gt; gro) {
				while(gro != klei &amp;&amp; zahlen[gro] &lt;= zahlen[pivot]) {
					++gro;
				}

				while(gro != klei &amp;&amp; zahlen[klei] &gt; zahlen[gro]) {
					--klei;
				}

				tausche(gro,klei);
			}

			if(zahlen[pivot] &gt; zahlen[gro]) {  //hier nun noch das &lt; in ein &gt; , da ja das pivot nun kleiner und nicht größer seinen darf
				tausche(pivot,gro);
			} else {
				gro = pivot;
			}

			quicky(gro + 1,ende);
			quicky(anfang,gro);
		}
	}
</code></pre>
<p>Fazit: Entropie pur. Wieso ist das so? In wie fern habe ich da einen eklatanten Logikfehler gemacht?</p>
<p>Danke für eure Hilfe.</p>
<p>PS: Ich weiß das das kein schöner c++ code ist, aber hier geht es mir um die logik und das verständnis von quicksort und weniger um schönen code <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/topic/279145/quicksort-logikproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 19:02:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279145.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Dec 2010 22:11:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to quicksort - logikproblem on Sun, 19 Dec 2010 22:11:50 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich habe mir einen quicksort geschrieben der das Pivot am Ende des Arrays hat :</p>
<pre><code class="language-cpp">public void quicky(int anfang,int ende) {
		int pivot = ende - 1;
		int klei = pivot - 1;
		int gro = anfang;

		if(klei &gt;= gro) {
			while(klei &gt; gro) {
				while(gro != klei &amp;&amp; zahlen[gro] &lt;= zahlen[pivot]) {
					++gro;
				}

				while(gro != klei &amp;&amp; zahlen[klei] &gt; zahlen[gro]) {
					--klei;
				}

				tausche(gro,klei);
			}

			if(zahlen[pivot] &lt; zahlen[gro]) {
				tausche(pivot,gro);
			} else {
				gro = pivot;
			}

			quicky(gro + 1,ende);
			quicky(anfang,gro);
		}
	}
</code></pre>
<p>Nun will ich aber das das Pivot am Anfang ist, und habe mir gedacht das es eiegntlich nur 4 stellen gibt wo ich was ändern muss:</p>
<pre><code class="language-cpp">public void quicky(int anfang,int ende) {
		int pivot = anfang;  //1. Hier muss das Pivot auf den Anfang gesetzt werden
		int klei = ende - 1; //2.Hier angleichen damit man noch im array bleibt
		int gro = anfang + 1;  //3. Hier den (nach größeren) suchenden index einen nach rechts verschieben, da er ja sonst auf das pivot zeigen würde

		if(klei &gt;= gro) {
			while(klei &gt; gro) {
				while(gro != klei &amp;&amp; zahlen[gro] &lt;= zahlen[pivot]) {
					++gro;
				}

				while(gro != klei &amp;&amp; zahlen[klei] &gt; zahlen[gro]) {
					--klei;
				}

				tausche(gro,klei);
			}

			if(zahlen[pivot] &gt; zahlen[gro]) {  //hier nun noch das &lt; in ein &gt; , da ja das pivot nun kleiner und nicht größer seinen darf
				tausche(pivot,gro);
			} else {
				gro = pivot;
			}

			quicky(gro + 1,ende);
			quicky(anfang,gro);
		}
	}
</code></pre>
<p>Fazit: Entropie pur. Wieso ist das so? In wie fern habe ich da einen eklatanten Logikfehler gemacht?</p>
<p>Danke für eure Hilfe.</p>
<p>PS: Ich weiß das das kein schöner c++ code ist, aber hier geht es mir um die logik und das verständnis von quicksort und weniger um schönen code <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/1996922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1996922</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Sun, 19 Dec 2010 22:11:50 GMT</pubDate></item></channel></rss>