跪求解释,只有归并实现不了!!!
main.cpp文件
#include<stdio.h>
#include<time.h>
#include<dos.h>
#include  "conio.h"
#include  "malloc.h"
#include  "string.h"
#include  "stdlib.h"
#include "i.h" 
#include "q.h" 
#include "r.h" 
#include "m.h" 
#define MAX 10000


void main() 

  int N; int *a; time_t start ,end; 
  double usetime; 
  int i,j,key=1; 
  while(key!=0) 
  {
  printf(" *********各种内排序的实现及比较********\n");
  printf("|\t1----------插 入 排 序\t\t|\n");
  printf("|\t2----------快 速 排 序\t\t|\n"); 
  printf("|\t3----------基 数 排 序\t\t|\n");
  printf("|\t4----------归 并 排 序\t\t|\n");
  printf(" ***************************************\n");
  printf("请选择排序方法:\n "); 
  scanf("%d",&i);  
   if(i==1) 
     printf("\n--------------------插 入 排 序--------------------\n"); 
   else if(i==2) 
     printf("\n--------------------快 速 排 序--------------------\n"); 
   else if(i==3) 
     printf("\n--------------------基 数 排 序 -------------------\n"); 
   else if(i==4) 
     printf("\n--------------------归 并 排 序 -------------------\n"); 
   
   if(i==3) 
      a=(int *)malloc((N+2)*sizeof(int));  
   else if(i==4) 
      a=(int *)malloc((N+1)*sizeof(int)); 
   else 
      a=(int *)malloc(N*sizeof(int)); 
   if(!a)
      exit(1); 
   
   printf("输入随机数组长度N:\n"); 
   scanf("%d",&N);
   printf("排序的结果为:\n");
      
   srand(time(NULL)); /*随机数发生器的初始化函数*//*if(i==4) for(j=0;j<N;j++) a[j]=rand()%1000; else*/ 
     for(j=0;j<N;j++)
       a[j]=rand()%2000;//控制随机数在2000以内
   
   start=clock(); /*开始*/
   if(i==1)
   { 
     InsertSort(a,N); 
     for(j=0;j<N;j++) 
     printf("%d\t",a[j]); 
   }
   else if(i==2)
   { 
    QuickSort(a,0,N-1); 
    for(j=0;j<N;j++)
    printf("%d\t",a[j]); 
   }
   else if(i==3)
   { 
    for(j=N-1;j>=0;j--) 
    a[j+1]=a[j]; 
    a[0]=0; 
    RadixSort(a,N); 
   } 
   else if(i==4)
   { 
    for(j=N-1;j>=0;j--) 
    a[j+1]=a[j];
    a[0]=0; 
    MergeSort(a,N); 
    for(j=1;j<N+1;j++) 
    printf("%d\t",a[j]);
   }
  end=clock(); /*结束*/
  
  usetime=(end-start)*1.0/CLOCKS_PER_SEC;  /*使用时间的计算*/
  printf("\n该排序所花的时间为:"); 
  printf("%lf 秒\n",usetime);
  putchar('\n'); free(a); i++; 
  } 
  getch();  

归并.h文件
void merge(int r[],int h,int m,int w,int t[]); 
void tgb(int s,int n,int r[],int t[]);
void MergeSort(int a[],int n)
  { 
     int i,s=1; 
     int t[10000]={0}; 
     while(s<n)
   { 
      tgb(s,n,a,t);      
      s*=2; 
      if(s<n)
      { 
       tgb(s,n,t,a); 
       s*=2; 
       }
      else
      { 
        i=1; 
        while(i<=n) 
        a[i]=t[i++]; 
      }
    } 
 } 
 
void tgb(int s,int n,int r[],int t[])
    { 
      int i=1; 
      while(i<=(n/2-s+1))
        { 
          merge(r,i,i+s-1,i+2*s-1,t); 
          i=i+2*s; 
        }
      if(i<(n-s+1)) 
      merge(r,i,i+s-1,n,t);
      else 
      while(i<=n) t[i]=r[i++]; 
    } 

 void merge(int r[],int h,int m,int w,int t[])
   { 
     int i,j,k; 
     i=h; j=m+1; k=h-1; 
     while(i<=m&&m<=w)
      { 
        k++; 
        if(r[i]<=r[j]) 
           t[k]=r[i++]; 
        else 
           t[k]=r[j++]; 
      } 
        if(i>m) 
        {
          while(j<=w) 
          t[++k]=r[j++];
        }
        else 
        {
         while(i<=m) 
         t[++k]=r[i++]; 
        }
 }