<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: quicksort code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 06 Oct 2008 09:59:15 GMT</pubDate>
    <description>DZone Snippets: quicksort code</description>
    <item>
      <title>Quicksort</title>
      <link>http://snippets.dzone.com/posts/show/4598</link>
      <description>Qucksort written in C. Uses the Hoare partition algorithm.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;	int len;&lt;br /&gt;	int elem[50240];&lt;br /&gt;} vector;&lt;br /&gt;&lt;br /&gt;void printv(char *str, vector v) {&lt;br /&gt;	printf("%s", str);&lt;br /&gt;	int i = 0;&lt;br /&gt;	for (; i &lt; v.len; ++i)&lt;br /&gt;		printf("%d ", v.elem[i]);&lt;br /&gt;	printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#define MAX(a, b) ((a &gt; b) ? (a) : (b))&lt;br /&gt;#define MIN(a, b) ((a &lt; b) ? (a) : (b))&lt;br /&gt;&lt;br /&gt;int partition(vector *v, int p, int r) {&lt;br /&gt;	int x;&lt;br /&gt;	if (p + 3 &lt; r)&lt;br /&gt;		x = MIN(v-&gt;elem[p], MAX(v-&gt;elem[p+1], v-&gt;elem[p+2]));&lt;br /&gt;	else&lt;br /&gt;		x = v-&gt;elem[p];&lt;br /&gt;	&lt;br /&gt;	int i = p - 1;&lt;br /&gt;	int j = r + 1;&lt;br /&gt;	while (1) {&lt;br /&gt;		do {&lt;br /&gt;			--j;&lt;br /&gt;		} while (v-&gt;elem[j] &gt; x);&lt;br /&gt;		do {&lt;br /&gt;			++i;&lt;br /&gt;		} while (v-&gt;elem[i] &lt; x);&lt;br /&gt;&lt;br /&gt;		if (i &lt; j) {&lt;br /&gt;			int aux = v-&gt;elem[j];&lt;br /&gt;			v-&gt;elem[j] = v-&gt;elem[i];&lt;br /&gt;			v-&gt;elem[i] = aux;&lt;br /&gt;		} else&lt;br /&gt;			return j;			&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void quicksort_real(vector *v, int p, int r) {&lt;br /&gt;	if (p &lt; r) {&lt;br /&gt;		int q = partition(v, p, r);&lt;br /&gt;		quicksort_real(v, p, q);&lt;br /&gt;		quicksort_real(v, q + 1, r);&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void quicksort(vector *v) {&lt;br /&gt;	printf("Quicksort...\n");&lt;br /&gt;	quicksort_real(v, 0, v-&gt;len - 1);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 01 Oct 2007 10:43:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4598</guid>
      <author>scvalex (Alexandru Scvortov)</author>
    </item>
  </channel>
</rss>
