<?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[Sortieralgorithmus]]></title><description><![CDATA[<p>Hallo Com,<br />
ich lerne zurzeit C++ und bin beim Thema Sortieralgorithmus angekommen.<br />
Ich komme aber an einer Stelle nicht weiter:<br />
Der Code funktioniert soweit, dass die zwei Zahlen nebeneinander gecheckt, und gegebenenfalls sortiert werden. Das aber nur einmal.<br />
Sollen z.B. die Zahlen 4,5,54,567,4 und 2304 sortiert werden, klappt alles wunderbar, bis zu dem Punkt, an dem er bei der zweiten 4 angekommen ist, das sieht dann so aus:</p>
<p>4, 5, 54, 4, 567, 2304</p>
<p>Ich weiß nicht, wie ich es hinkriegen kann, dass er die ganze Kette so oft checkt und sortiert, bis alles stimmt.</p>
<p>Ich hoffe jemand kann mir helfen <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>grüße</p>
<p>Hier noch mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &quot;stdafx.h&quot;

using namespace std;

void sort(long[],int);
void xchg(long &amp;, long &amp;);
void outputNumberSequence(int, long []);

int main(int argc, char *argv[])
{
    int retVal = 0;
    if(argc &gt; 1)
    {
        long *numbers = (long *) malloc((argc - 1) * sizeof(char));

        for(int cnt = 1; cnt &lt; argc; ++cnt)
            numbers[cnt - 1] = strtol(argv[cnt], 0, 10);

        cout &lt;&lt; &quot;unsorted: &quot;;
        outputNumberSequence(argc, numbers);

        sort(numbers,argc);

        cout &lt;&lt; &quot;after sort: &quot;;
        outputNumberSequence(argc, numbers);

        for(int cnt = 0; cnt &lt; argc - 2; ++cnt)
            if(numbers[cnt] &gt; numbers[cnt+1])
            {
                cout &lt;&lt; &quot;not sorted at position &quot; &lt;&lt; cnt + 1 &lt;&lt; endl;
                retVal = -1;
            }
		if(retVal  = 0)
			cout &lt;&lt; &quot;sorted&quot; &lt;&lt; endl;
    }
	int a;
	cin &gt;&gt; a;
    return retVal;
}

void sort(long numbers[], int argc)
{

    for(int cnt=0; cnt &lt; argc-1; ++cnt)
    {
        if (numbers[cnt]&gt;numbers[cnt+1])
            xchg(numbers[cnt], numbers[cnt+1]);
        while(numbers[cnt]&lt;numbers[cnt-1])
            xchg(numbers[cnt], numbers[cnt-1]);

    }
}

void xchg(long &amp;a, long &amp;b)
{
    long tmp = a;
    a = b;
    b = tmp;
}

void outputNumberSequence(int argc, long numbers[])
{
    for(int cnt = 0; cnt &lt; argc - 1; ++cnt)
        cout &lt;&lt; numbers[cnt] &lt;&lt; &quot; &quot;;
    cout &lt;&lt; endl;
}
</code></pre>
<p>PS: Ja, ich weiß, dass die while-Loop falsch ist, dass ist nähmlich genau die Stelle, wo ich nicht weiter komme.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309045/sortieralgorithmus</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 12:09:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309045.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Oct 2012 15:35:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sortieralgorithmus on Fri, 12 Oct 2012 15:35:31 GMT]]></title><description><![CDATA[<p>Hallo Com,<br />
ich lerne zurzeit C++ und bin beim Thema Sortieralgorithmus angekommen.<br />
Ich komme aber an einer Stelle nicht weiter:<br />
Der Code funktioniert soweit, dass die zwei Zahlen nebeneinander gecheckt, und gegebenenfalls sortiert werden. Das aber nur einmal.<br />
Sollen z.B. die Zahlen 4,5,54,567,4 und 2304 sortiert werden, klappt alles wunderbar, bis zu dem Punkt, an dem er bei der zweiten 4 angekommen ist, das sieht dann so aus:</p>
<p>4, 5, 54, 4, 567, 2304</p>
<p>Ich weiß nicht, wie ich es hinkriegen kann, dass er die ganze Kette so oft checkt und sortiert, bis alles stimmt.</p>
<p>Ich hoffe jemand kann mir helfen <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>grüße</p>
<p>Hier noch mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;
#include &quot;stdafx.h&quot;

using namespace std;

void sort(long[],int);
void xchg(long &amp;, long &amp;);
void outputNumberSequence(int, long []);

int main(int argc, char *argv[])
{
    int retVal = 0;
    if(argc &gt; 1)
    {
        long *numbers = (long *) malloc((argc - 1) * sizeof(char));

        for(int cnt = 1; cnt &lt; argc; ++cnt)
            numbers[cnt - 1] = strtol(argv[cnt], 0, 10);

        cout &lt;&lt; &quot;unsorted: &quot;;
        outputNumberSequence(argc, numbers);

        sort(numbers,argc);

        cout &lt;&lt; &quot;after sort: &quot;;
        outputNumberSequence(argc, numbers);

        for(int cnt = 0; cnt &lt; argc - 2; ++cnt)
            if(numbers[cnt] &gt; numbers[cnt+1])
            {
                cout &lt;&lt; &quot;not sorted at position &quot; &lt;&lt; cnt + 1 &lt;&lt; endl;
                retVal = -1;
            }
		if(retVal  = 0)
			cout &lt;&lt; &quot;sorted&quot; &lt;&lt; endl;
    }
	int a;
	cin &gt;&gt; a;
    return retVal;
}

void sort(long numbers[], int argc)
{

    for(int cnt=0; cnt &lt; argc-1; ++cnt)
    {
        if (numbers[cnt]&gt;numbers[cnt+1])
            xchg(numbers[cnt], numbers[cnt+1]);
        while(numbers[cnt]&lt;numbers[cnt-1])
            xchg(numbers[cnt], numbers[cnt-1]);

    }
}

void xchg(long &amp;a, long &amp;b)
{
    long tmp = a;
    a = b;
    b = tmp;
}

void outputNumberSequence(int argc, long numbers[])
{
    for(int cnt = 0; cnt &lt; argc - 1; ++cnt)
        cout &lt;&lt; numbers[cnt] &lt;&lt; &quot; &quot;;
    cout &lt;&lt; endl;
}
</code></pre>
<p>PS: Ja, ich weiß, dass die while-Loop falsch ist, dass ist nähmlich genau die Stelle, wo ich nicht weiter komme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259728</guid><dc:creator><![CDATA[LPGermanification]]></dc:creator><pubDate>Fri, 12 Oct 2012 15:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Fri, 12 Oct 2012 15:47:23 GMT]]></title><description><![CDATA[<p>Da hat doch dein Algo schon einmal was richtig gemacht mit dem Tausch. Ich glaube du musst ihn bloß noch sooft wieder durchlaufen lassen, bis es keinen Tausch mehr gibt, dann ist deine Liste sortiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259735</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 12 Oct 2012 15:47:23 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Fri, 12 Oct 2012 16:14:26 GMT]]></title><description><![CDATA[<p>LPGermanification schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void sort(long numbers[], int argc)
{
	bool sorted = false;
	
	while( !sorted ) {

		sorted = true;
		for(int cnt=0; cnt &lt; argc-1; ++cnt)
		{
			if (numbers[cnt]&gt;numbers[cnt+1]) {
				xchg(numbers[cnt], numbers[cnt+1]);
				sorted = false;
			}

		/*	while(numbers[cnt]&lt;numbers[cnt-1])
				xchg(numbers[cnt], numbers[cnt-1]);

		wtf? */

		}
	}
}

void outputNumberSequence(int argc, long numbers[]) // fuer speichergroessen nimmst size_t
{
    for( int cnt = 0;
         cnt &lt; argc - 1; // unschoen, warum erwartet outputNumberSequence nicht die laenge, sondern laenge + 1?
         ++cnt )
        cout &lt;&lt; numbers[cnt] &lt;&lt; &quot; &quot;;
    cout &lt;&lt; endl;
}
</code></pre>
</blockquote>
<p>// edit: steht auch auf <a href="http://de.wikipedia.org/wiki/Bubblesort#Algorithmus" rel="nofollow">http://de.wikipedia.org/wiki/Bubblesort#Algorithmus</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259741</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 12 Oct 2012 16:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Fri, 12 Oct 2012 16:29:31 GMT]]></title><description><![CDATA[<p>Dankeschön <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/2259745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259745</guid><dc:creator><![CDATA[LPGermanification]]></dc:creator><pubDate>Fri, 12 Oct 2012 16:29:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Fri, 12 Oct 2012 16:40:34 GMT]]></title><description><![CDATA[<p>Noch mein Senf.</p>
<p>Meist wird in Schleifen ein Index [0...n) gezählt, also 0 bis ausschließlich n.</p>
<p>Du musst in Deinem Beispiel ständig irgendwelche offsets hinzuzählen oder abziehen.<br />
Wie wäre es irgendwo am Anfang ein</p>
<pre><code class="language-cpp">--argc; ++argv;
</code></pre>
<p>einzubauen.<br />
Dann hast Du genau argc zusätzliche Argumente an den Stellen argv[0]...argv[argc-1]. Du wirst sehen, die meisten der Offsets fallen dann weg.</p>
<p>Ausserdem wäre es sicherlich besser, wenn Deine beiden Funktionen, die auf dem array arbeiten die Parameter auch in der gleichen Reihenfolge annähmen.</p>
<p>Und</p>
<pre><code class="language-cpp">if(retVal  = 0)
  cout &lt;&lt; &quot;sorted&quot; &lt;&lt; endl;
</code></pre>
<p>ist natürlich ein Fehler...<br />
Davor sollte Dich Dein Compiler warnen! Also Compiler-Warnungen einschalten.</p>
<p>Sicherlich ist das ganze eher ein C Programm, und es gibt noch einiges zu verbessern...aber Du fängst ja gerade damit an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259747</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 12 Oct 2012 16:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 07:41:14 GMT]]></title><description><![CDATA[<p>Hier das ganze nochmal ein wenig aufgehübscht. (Geht sicherlich noch besser und vorallem effektiver).<br />
(mit C++11)</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;sstream&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

using namespace std;

void bubblesort(vector&lt;int&gt;&amp; vec)
{
    for (auto it(begin(vec)); it != end(vec)-1; ++it)
        for(auto jt(it+1); jt != end(vec); ++jt)
            if (*jt &lt; *it)
                swap(*jt, *it);
}

int main(int argc, char* argv[])
{
    cout &lt;&lt; &quot;vor dem sortieren:\n&quot;;
    for (auto i(1); i&lt;argc; ++i)
        cout &lt;&lt; argv[i] &lt;&lt; &quot;\n&quot;;
    vector&lt;int&gt; to_be_sorted;

    back_insert_iterator&lt;vector&lt;int&gt; &gt; it(to_be_sorted);

    transform(&amp;argv[1], &amp;argv[argc], it, [](char const* str)
                                                 {stringstream ss(str);
                                                 int t;
                                                 ss &gt;&gt; t;
                                                 return t;});

    bubblesort(to_be_sorted);
    cout &lt;&lt; &quot;nach dem sortieren:\n&quot;;
    for (auto&amp; it : to_be_sorted)
    {
        cout &lt;&lt; it &lt;&lt; &quot;\n&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2259878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259878</guid><dc:creator><![CDATA[Der Tobi]]></dc:creator><pubDate>Sat, 13 Oct 2012 07:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 08:28:04 GMT]]></title><description><![CDATA[<p>Der Tobi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">transform(&amp;argv[1], &amp;argv[argc], it, [](char const* str)
                                                 {stringstream ss(str);
                                                 int t;
                                                 ss &gt;&gt; t;
                                                 return t;});
</code></pre>
</blockquote>
<p>Braucht das Lambda nicht einen return type?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259885</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 13 Oct 2012 08:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 08:29:13 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Der Tobi schrieb:</p>
<blockquote>
<pre><code class="language-cpp">transform(&amp;argv[1], &amp;argv[argc], it, [](char const* str)
                                                 {stringstream ss(str);
                                                 int t;
                                                 ss &gt;&gt; t;
                                                 return t;});
</code></pre>
</blockquote>
<p>Braucht das Lambda nicht einen return type?</p>
</blockquote>
<p>Nein, du hugo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259886</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 13 Oct 2012 08:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 08:32:43 GMT]]></title><description><![CDATA[<p>Warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259889</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 13 Oct 2012 08:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 08:35:14 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Warum nicht?</p>
</blockquote>
<p>Weil er deduziert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259890</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 13 Oct 2012 08:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 08:50:05 GMT]]></title><description><![CDATA[<p>ISO/IEC 14882:2011(E) schrieb:</p>
<blockquote>
<p>§5.1.2.4 If a lambda-expression does not include a trailing-return-type, it is as if the trailing-return-type denotes the following type:<br />
— if the compound-statement is of the form<br />
{ attribute-specifier-seq<sub>opt</sub> return expression ; }<br />
the type of the returned expression after lvalue-to-rvalue conversion (4.1), array-to-pointer conversion (4.2), and function-to-pointer conversion (4.3);<br />
— otherwise, void.</p>
</blockquote>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259892</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 13 Oct 2012 08:50:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 12:22:13 GMT]]></title><description><![CDATA[<p>Na gut, <strong>und</strong> weil es nur eine <code>return</code> Anweisung gibt <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/2259937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259937</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 13 Oct 2012 12:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 12:43:25 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Na gut, <strong>und</strong> weil es nur eine <code>return</code> Anweisung gibt <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>Sei einfach still wenn du keine Ahnung hast.</p>
<p>Der ganze Körper des Lambda-Ausdrucks darf nur aus einem einzelnen return-Statement bestehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259946</guid><dc:creator><![CDATA[Du Hugo]]></dc:creator><pubDate>Sat, 13 Oct 2012 12:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 12:56:43 GMT]]></title><description><![CDATA[<p>Da weder mein Compiler gemeckert, noch das Ergebnis falsch war, nehme ich mal an, Sone hat ausnahmsweise mal recht. Wenn der Compiler den Rückgabetyp schon zur Compilezeit bestimmen kann, kann ich auf den Trailing Return Type verzichten.</p>
<p>bzw. sagt mein C++11 Buch:</p>
<blockquote>
<p>-&gt;... ist optional und dient der Angabe des Rückgabetyps.Wird dieser weggelassen,<br />
überlässt man dem Compiler, diesen automatisch zu ermitteln. In den<br />
meisten Fällen schafft der Compiler das. Innerhalb von Templates, in wenigen<br />
Sonderfällen oder zur Dokumentation können Sie den Typ hier angeben.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2259949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259949</guid><dc:creator><![CDATA[Der Tobi]]></dc:creator><pubDate>Sat, 13 Oct 2012 12:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sortieralgorithmus on Sat, 13 Oct 2012 13:19:40 GMT]]></title><description><![CDATA[<p>Der Tobi schrieb:</p>
<blockquote>
<p>Wenn der Compiler den Rückgabetyp schon zur Compilezeit bestimmen kann, kann ich auf den Trailing Return Type verzichten.</p>
</blockquote>
<p>Wenn /dein/ Compiler das kann, dann ist das dein Privatvergnügen. Der Standard ist in diesem Punkt glasklar, da gibt's nichts zu diskutieren.</p>
<p>ps@h4x0r: Danke fürs auf'n Leim geh'n, is eh witziger als dich hugo 'z schimpf'n <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/2259955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259955</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 13 Oct 2012 13:19:40 GMT</pubDate></item></channel></rss>