<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: merge-sort code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 20:11:10 GMT</pubDate>
    <description>DZone Snippets: merge-sort code</description>
    <item>
      <title>Merge-sort</title>
      <link>http://snippets.dzone.com/posts/show/4585</link>
      <description>Implements the classic Merge-sort algorithm.&lt;br /&gt;&lt;br /&gt;Time: theta(lg(n))&lt;br /&gt;Space: theta(n)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string.h&gt;&lt;br /&gt;&lt;br /&gt;void printv(char* in, int *v, int n) {&lt;br /&gt;	printf("%s", in);&lt;br /&gt;	int i = 0;&lt;br /&gt;	for (; i &lt; n; ++i)&lt;br /&gt;		printf("%d ", v[i]);&lt;br /&gt;	printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void merge(int *v, int p, int q, int r) {&lt;br /&gt;	int i = p;&lt;br /&gt;	int j = q + 1;&lt;br /&gt;	&lt;br /&gt;	int *tmp = (int*)malloc((r - p + 1) * sizeof(int));&lt;br /&gt;	int k = 0;&lt;br /&gt;	&lt;br /&gt;	while ((i &lt;= q) &amp;&amp; (j &lt;= r)) {&lt;br /&gt;		if (v[i] &lt; v[j])&lt;br /&gt;			tmp[k++] = v[i++];&lt;br /&gt;		else&lt;br /&gt;			tmp[k++] = v[j++];&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	while (i &lt;= q)&lt;br /&gt;		tmp[k++] = v[i++];&lt;br /&gt;	&lt;br /&gt;	while (j &lt;= r)&lt;br /&gt;		tmp[k++] = v[j++];&lt;br /&gt;	&lt;br /&gt;	memcpy(v + p, tmp, (r - p + 1) * sizeof(int));&lt;br /&gt;	free(tmp);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void mergeS(int *v, int p, int r) {&lt;br /&gt;	if (p &lt; r) {&lt;br /&gt;		int q = (p + r) / 2;&lt;br /&gt;		mergeS(v, p, q);&lt;br /&gt;		mergeS(v, q + 1, r);&lt;br /&gt;		merge(v, p, q, r);&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt;	int n = 10;&lt;br /&gt;	int v[] = {9, 8, 7, 6, 5, 5, 4, 3, 2, 1};&lt;br /&gt;	&lt;br /&gt;	printv("V: ", v, n);&lt;br /&gt;	mergeS(v, 0, n - 1);&lt;br /&gt;	printv("V: ", v, n);&lt;br /&gt;	&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 28 Sep 2007 06:40:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4585</guid>
      <author>scvalex (Alexandru Scvortov)</author>
    </item>
  </channel>
</rss>
