归并排序(merge sort)算法实现

归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为 O(nlogn),空间复杂度为 O(n)

实现代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> #include < stdio.h >
#include
" common.h "
void merge( int data[], int p, int q, int r)
{
int i,j,k,n1,n2;
n1
= q - p + 1 ;
n2
= r - q;
int L[n1];
int R[n2];
for (i = 0 ,k = p;i < n1;i ++ ,k ++ )
L[i]
= data[k];
for (i = 0 ,k = q + 1 ;i < n2;i ++ ,k ++ )
R[i]
= data[k];
for (k = p,i = 0 ,j = 0 ;i < n1 && j < n2;k ++ )
{
if (L[i] > R[j])
{
data[k]
= L[i];
i
++ ;
}
else
{
data[k]
= R[j];
j
++ ;
}
}
if (i < n1)
{
for (j = i;j < n1;j ++ ,k ++ )
data[k]
= L[j];
}
if (j < n2)
{
for (i = j;i < n2;i ++ ,k ++ )
data[k]
= R[i];
}
}
void merge_sort( int data[], int p, int r)
{
if (p < r)
{
int q = (p + r) / 2 ;
merge_sort(data,p,q);
merge_sort(data,q
+ 1 ,r);
merge(data,p,q,r);
}
}

void test_merge_sort()
{
int data[] = { 44 , 12 , 145 , - 123 , - 1 , 0 , 121 };
printf(
" -------------------------------mergesort----------------------------\n " );
out_int_array(data,
7 );
merge_sort(data,
0 , 6 );
out_int_array(data,
7 );
}

int main()
{
test_merge_sort();
return 0 ;
}


国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

你可能感兴趣的:(算法,android,Google,J#,出版)