<?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 implementierung]]></title><description><![CDATA[<p>hallo</p>
<p>meine implementierung des mergesort-algorithmus (nicht natürlich) sieht so aus:</p>
<pre><code>template&lt;class IterType&gt;
void Mergesort(IterType Begin, IterType End)
{
    std::size_t Lenght = End - Begin;
    if(Lenght &lt;= 1)
        return;
    std::deque&lt;typename IterType::value_type&gt; Lhs(Begin, Begin + Lenght / 2);
    std::deque&lt;typename IterType::value_type&gt; Rhs(Begin + Lenght / 2, End);
    Mergesort(Lhs.begin(), Lhs.end());
    Mergesort(Rhs.begin(), Rhs.end());
    for(; !Lhs.empty() &amp;&amp; !Rhs.empty(); Begin++)
        if(Lhs.front() &lt;= Rhs.front())
        {
            *Begin = Lhs.front();
            Lhs.pop_front();
        }
        else
        {
            *Begin = Rhs.front();
            Rhs.pop_front();
        }
    for(; !Lhs.empty(); Begin++)
    {
        *Begin = Lhs.front();
        Lhs.pop_front();
    }
    for(; !Rhs.empty(); Begin++)
    {
        *Begin = Rhs.front();
        Rhs.pop_front();
    }
}
</code></pre>
<p>ich hab die funktion bereits zwei mal neu implementiert weil mir die art der speicherhandhabung nicht gefallen hat. es ist jedoch in jedem fall so ein speicherwirr-warr rausgekommen (wie auch oben). sieht jemand auf anhieb eine möglichkeit diese funktion &quot;weniger speicherlastig&quot; zu implementieren?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318751/mergesort-implementierung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 18:26:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318751.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Jul 2013 09:05:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:05:08 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>meine implementierung des mergesort-algorithmus (nicht natürlich) sieht so aus:</p>
<pre><code>template&lt;class IterType&gt;
void Mergesort(IterType Begin, IterType End)
{
    std::size_t Lenght = End - Begin;
    if(Lenght &lt;= 1)
        return;
    std::deque&lt;typename IterType::value_type&gt; Lhs(Begin, Begin + Lenght / 2);
    std::deque&lt;typename IterType::value_type&gt; Rhs(Begin + Lenght / 2, End);
    Mergesort(Lhs.begin(), Lhs.end());
    Mergesort(Rhs.begin(), Rhs.end());
    for(; !Lhs.empty() &amp;&amp; !Rhs.empty(); Begin++)
        if(Lhs.front() &lt;= Rhs.front())
        {
            *Begin = Lhs.front();
            Lhs.pop_front();
        }
        else
        {
            *Begin = Rhs.front();
            Rhs.pop_front();
        }
    for(; !Lhs.empty(); Begin++)
    {
        *Begin = Lhs.front();
        Lhs.pop_front();
    }
    for(; !Rhs.empty(); Begin++)
    {
        *Begin = Rhs.front();
        Rhs.pop_front();
    }
}
</code></pre>
<p>ich hab die funktion bereits zwei mal neu implementiert weil mir die art der speicherhandhabung nicht gefallen hat. es ist jedoch in jedem fall so ein speicherwirr-warr rausgekommen (wie auch oben). sieht jemand auf anhieb eine möglichkeit diese funktion &quot;weniger speicherlastig&quot; zu implementieren?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341064</guid><dc:creator><![CDATA[flabahz]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:22:13 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht sicher, ob ich Mergesort richtig verstanden habe, aber ich versuche es mal: Müsste es nicht möglich sein, die &quot;Liste&quot; nicht wirklich aufzuteilen, sondern nur jeweils Iteratoren auf Anfang und Ende der Aufteilung weiterreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341066</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:24:01 GMT]]></title><description><![CDATA[<p>probier es mal so:</p>
<pre><code class="language-cpp">template&lt;class Iter1, class Iter2&gt;
void mergesort_impl(Iter1 b, Iter1 e, Iter2 b, Iter2 e)
{
  ...
}

template&lt;class Iter&gt;
void mergesort(Iter b, Iter e)
{
  typedef typename iterator_traits&lt;Iter&gt;::value_type T;
  std::vector&lt;T&gt; temp (b,e);
  mergesort_impl(b,e,temp.begin(),temp.end());
};
</code></pre>
<p>und dann in mergesort_impl keine neuen container erzeugen und auch kein new verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341067</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:26:24 GMT]]></title><description><![CDATA[<p>Mergesort war doch eben NICHT inplace, meine ich mich zu erinnern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341071</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:31:12 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Mergesort war doch eben NICHT inplace, meine ich mich zu erinnern?</p>
</blockquote>
<p>Laut Wikipedia lässt sich Mergesort in-place implementieren, was aber etwas trickreich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341074</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 09:32:59 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Mergesort war doch eben NICHT inplace, meine ich mich zu erinnern?</p>
</blockquote>
<p>Wenn man nicht gerade verkettete Listen hat, benötigt man extra Speicher. Aber den kann man sich ganz am Anfang einmal organisieren und muss das nicht zwischendurch andauernd machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341075</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 25 Jul 2013 09:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to mergesort implementierung on Thu, 25 Jul 2013 10:28:46 GMT]]></title><description><![CDATA[<p>flabahz schrieb:</p>
<blockquote>
<p>sieht jemand auf anhieb eine möglichkeit diese funktion &quot;weniger speicherlastig&quot; zu implementieren?</p>
</blockquote>
<p>Eine schöne Gelegenheit sich mal <code>std::list::splice()</code> anzuschauen.</p>
<p>Und dann auch noch <code>std::list::merge()</code> . Aber das ist dann schon fast wie von Beginn an <code>std::sort()</code> zu nehmen. <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/2341098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341098</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 25 Jul 2013 10:28:46 GMT</pubDate></item></channel></rss>