一道无法正常排序的笔试题。该怎么解决

一道无法正常排序的笔试题。
请问 哪位高手能否说一下,这道归并排序算法题,为什么无法实现排序,应该如何修改??这是一位朋友参加的笔试排序算法题。


#include<stdio.h>
void main()
{
  void MergerSort(int a[],int low,int high);  
  int i,a[10];
  printf("请输入10个数值:\n");
  for(i=0;i<10;i++)
  scanf("%d",&a[i]); 
  printf("下面输出归并排序之后的结果:\n");
  MergerSort(a,0,9);
  for(i=0;i<10;i++)
 {
  printf("%d ",a[i]);
 }
}
void Merger(int a[],int low,int mid, int high)
{
  int b[10];
  int i,j,k;
  i=low;
  j=mid+1;
  k=0;
  while(i<mid&&j<=high)
  if(a[i]<=a[j])
 {
  b[k]=a[i];
  i++;
  k++;
  }
  else
  {
  b[k]=a[j];
  j++;
  k++;
  }
  while(i<=mid)
  {
  b[k]=a[i];
  i++;
  k++;
  }
  while(j<=high)
  {
  b[k]=a[j];
  j++;
  k++;
  }
  for(k=0,i=low;i<=high;k++,i++)
  a[i]=b[k];
}

void MergerSort(int a[],int low,int high)
{
   int mid;
  if(low<high)
  {
   mid=(low+high)/2;
   MergerSort(a,low,mid);
   MergerSort(a,mid+1,high);
   Merger(a,low,mid,high);
  }
}

------解决方案--------------------
while(i<mid&&j<=high)
写错了。按照你的思路,应该是 low .. mid 为一段, mid + 1 .. high 为一段
因此应该是 i<=mid ,而不是 i<mid
------解决方案--------------------
LZ没加缩进的代码看得我太痛苦了,不看了
给一个正确的代码,LZ参考一下吧

C/C++ code
#include <iostream>
using namespace std;
//归并排序
void Merge(int *arr, int start, int mid, int end)
{
    int temp1[10], temp2[10];
    int n1, n2;
    int i, j, k;
    n1 = mid - start + 1;
    n2 = end - mid;
    //拷贝前半部分数组
    for(i=0;i<n1;i++)
        temp1[i] = arr[start + i];
    //拷贝后半部分数组
    for(i=0;i<n2;i++)
        temp2[i] = arr[mid + i + 1];
    //把后面的元素设置的很大
    temp1[n1] = temp2[n2] = INT_MAX;
    i = j = 0;
    // 逐个扫描两部分数组然后放到相应的位置去
    for(k=start;k<=end;k++)
    {
        if(temp1[i] <= temp2[j])
        {
            arr[k] = temp1[i];
            i++;
        }
        else
        {
            arr[k] = temp2[j];
            j++;
        }
    }
}

void MergerSort(int *arr, int start, int end)
{
    int i;
    if(start < end)
    {
        i = (start + end) / 2;
        MergerSort(arr, start, i);
        MergerSort(arr, i+1, end);
        Merge(arr, start, i, end);
    }
}

#include<stdio.h>
void main()
{
    
    int i,a[10];
    printf("请输入10个数值:\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);  
    printf("下面输出归并排序之后的结果:\n");
    MergerSort(a,0,9);
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}