<?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 parallelisieren]]></title><description><![CDATA[<p>hi,</p>
<p>wie kann ich mein quicksort als parallelen algo implementieren?</p>
<pre><code>int partition(vector&lt;int&gt; &amp;vec, int left, int right) {
    int pivot_index = left + rand() % (right - left + 1);
    int pivot = vec[pivot_index];

    swap(vec[pivot_index], vec[right]);  // Move pivot to end
    int store_index = left;

    for(int i = left; i &lt; right; i++) {
    	if(vec[i] &lt;= pivot) {
            swap(vec[store_index], vec[i]);
            store_index++;
    	}
    }

    swap(vec[right], vec[store_index]);  // Move pivot to its final place
    return store_index;
}

void quicksort(int *a, int l, int r) {
    // If the list has 2 or more items
    // sort left part
    if(l &lt; j) {
    	// Get lists of bigger and smaller items and final position of pivot
        int pivot_index = partition(a, left, right);

        // Recursively sort elements smaller than the pivot (assume pivotNewIndex - 1 does not underflow)
        quicksort(a, left, pivot_index - 1);
        // Recursively sort elements at least as big as the pivot (assume pivotNewIndex + 1 does not overflow)
        quicksort(a, pivot_index + 1, right);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/325194/quicksort-parallelisieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 18:55:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325194.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Apr 2014 20:12:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to quicksort parallelisieren on Fri, 18 Apr 2014 20:12:46 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>wie kann ich mein quicksort als parallelen algo implementieren?</p>
<pre><code>int partition(vector&lt;int&gt; &amp;vec, int left, int right) {
    int pivot_index = left + rand() % (right - left + 1);
    int pivot = vec[pivot_index];

    swap(vec[pivot_index], vec[right]);  // Move pivot to end
    int store_index = left;

    for(int i = left; i &lt; right; i++) {
    	if(vec[i] &lt;= pivot) {
            swap(vec[store_index], vec[i]);
            store_index++;
    	}
    }

    swap(vec[right], vec[store_index]);  // Move pivot to its final place
    return store_index;
}

void quicksort(int *a, int l, int r) {
    // If the list has 2 or more items
    // sort left part
    if(l &lt; j) {
    	// Get lists of bigger and smaller items and final position of pivot
        int pivot_index = partition(a, left, right);

        // Recursively sort elements smaller than the pivot (assume pivotNewIndex - 1 does not underflow)
        quicksort(a, left, pivot_index - 1);
        // Recursively sort elements at least as big as the pivot (assume pivotNewIndex + 1 does not overflow)
        quicksort(a, pivot_index + 1, right);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395357</guid><dc:creator><![CDATA[mike1]]></dc:creator><pubDate>Fri, 18 Apr 2014 20:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Fri, 18 Apr 2014 20:16:23 GMT]]></title><description><![CDATA[<p>Was wäre bei Divide-and-Conquer naheliegend?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395358</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 18 Apr 2014 20:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Sat, 19 Apr 2014 09:31:00 GMT]]></title><description><![CDATA[<p>man koennte folgende aufrufe parallelisieren?</p>
<pre><code>// Recursively sort elements smaller than the pivot (assume pivotNewIndex - 1 does not underflow)
quicksort(a, left, pivot_index - 1);
// Recursively sort elements at least as big as the pivot (assume pivotNewIndex + 1 does not overflow)
quicksort(a, pivot_index + 1, right);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2395406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395406</guid><dc:creator><![CDATA[mike1]]></dc:creator><pubDate>Sat, 19 Apr 2014 09:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Sat, 19 Apr 2014 10:31:26 GMT]]></title><description><![CDATA[<p>mike1 schrieb:</p>
<blockquote>
<p>man koennte folgende aufrufe parallelisieren?</p>
<pre><code>// Recursively sort elements smaller than the pivot (assume pivotNewIndex - 1 does not underflow)
quicksort(a, left, pivot_index - 1);
// Recursively sort elements at least as big as the pivot (assume pivotNewIndex + 1 does not overflow)
quicksort(a, pivot_index + 1, right);
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395413</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Apr 2014 10:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Mon, 21 Apr 2014 18:12:56 GMT]]></title><description><![CDATA[<p>Dann wird aber der größte teil der arbeit immer noch nicht parallel gemacht. Eine echte parallele implementierung sollte auch das partitionieren parallelisieren. Wichtig ist auch, dass man seine prozessoren zumindest gemäß der paritionsgröße aufteilt. Sonst hat man irgendwann mit etwas pech irgendwann ganz viele prozessoren die fast nix machen und einen der ackern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395718</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Mon, 21 Apr 2014 18:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Mon, 21 Apr 2014 19:39:29 GMT]]></title><description><![CDATA[<p>Innerhalb der quicksort-Aufrufe wird die Liste ja nochmal partitioniert, deshalb ist das schon paralell. Die obere und untere Liste wird ja dann gleichzeitig partitioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395734</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Mon, 21 Apr 2014 19:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to quicksort parallelisieren on Mon, 21 Apr 2014 20:08:54 GMT]]></title><description><![CDATA[<p>Ja, aber der erste partitionierungsschritt ist mit Abstand der größte. Du beschränkst damit effektiv den möglichen speedup.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395739</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Mon, 21 Apr 2014 20:08:54 GMT</pubDate></item></channel></rss>