归拢算法

归并算法
归并算法已经知道 但是伪代码要怎么改写成程序语言,才能能够在vc上运行 例如
  MERGE(A,p,q,r) 
  n1←q-p+1;
  n2←r-q;
  create arrays L[1...n1+1]and R[1...n2+1]
  for i←1to n1
  do L[i]←A[p+i-1]
  for j←1to n2
  do R[j]←A[q+j]
  L[n1+1]←∞
  R[n2+1]←∞
  i←1
  j←1
  for k←p to r
  do if L[i]<R[j]
  then A[k]←L[i]
  i←i+1
  else A[k]←R[j]
  j←j+1
 下边是我写的代码但出现错误了 请高手指教
#include<stdio.h>
main()
{
int a[20]={1,2,2,3,6,45,4,8,9,7,4,5,6,9,4,7,2,31,32,40};
int L[10],R[10],i,j,k;
int m,n,p=0,q=9,r=19;
  m=q-p+1;
n=r-q;
for(i=0;i<m;i++)
L[i]=a[p+i];
for(j=0;j<n;j++)
R[j]=a[q+j+1];
i=j=0;
for(k=p;k<=r;k++)

{ if(L[i]<R[j]) {a[k]=L[i];
i++;}
else {a[k]=R[j];
j++;}
printf("%d ",a[k]);
}
   
}


------解决方案--------------------
http://topic.****.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html
------解决方案--------------------
http://topic.****.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html请看下
------解决方案--------------------
LZ最好自己写下,自己写和看别人的代码完全是两回事。

C/C++ code

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<malloc.h>

void merge_sort(int*,int);
void merge(int*,int);

int main()
{
    int a[20]={1,2,2,3,6,45,4,8,9,7,4,5,6,9,4,7,2,31,32,40};
    register int i;

    merge_sort(a,20);

    for(i=0;i<20;i++)
        printf("%4d\t",a[i]);

    printf("\n");
    system("pause");

    return(0);
}

void merge_sort(int *a,int n)
{
    if(n>1)
    {
        merge_sort(a,n/2);
        merge_sort(a+n/2,n-n/2);
        merge(a,n);
    }
}

void merge(int *a,int n)
{
    int mid=n/2,*lp,*rp;
    int *l=(int*)malloc((mid+1)*sizeof(int)),*r=(int*)malloc((n-mid+1)*sizeof(int));
    register int i;

    lp=l,rp=r;

    for(i=0;i<mid;i++)
        l[i]=a[i];
    l[i]=INT_MAX;

    for(;i<n;i++)
        r[i-mid]=a[i];
    r[i-mid]=INT_MAX;

    for(i=0;i<n;i++)
        if(*lp<*rp)
            *a++=*lp++;
        else
            *a++=*rp++;

    free(l);
    free(r);
}