合并排序逻辑错误

Merge Sort Logical Error

我实际上是在做作业,发现了一个关于合并排序的在线代码并对其进行了一些编辑,但它给出了逻辑错误,答案(排序数组)没有显示,而是只显示前 2 个数字正确(有时)但我无法修复它,如果你可以检查我的代码并给我一些想法。

#include<stdio.h>

int arr[20];       // array to be sorted

int main()
{

  int n,i;
  clrscr();
  printf("Enter the size of array\n");  // input the elements
  scanf("%d",&n);
  printf("Enter the elements:");
  for(i=0; i<n; i++)
    scanf("%d",&arr[i]);

  merge_sort(arr,0,n-1);  // sort the array

  printf("Sorted array:");  // print sorted array
  for(i=0; i<n; i++)
    printf("%d",arr[i]);
   getch();
  return 0;
}

int merge_sort(int arr[],int low,int high)
{
  int mid; int i;
  if(low<high) {

    mid=(low+high)/2;
    // Divide and Conquer
    merge_sort(arr,low,mid);
    merge_sort(arr,mid+1,high);
    // Combine


    merge(arr,low,mid,high);
  }

  return 0;
}

int merge(int arr[],int l,int m,int h)
{
  int arr1[10],arr2[10];  // Two temporary arrays to
  //hold the two arrays to be merged
  int n1,n2,i,j,k,z;

    i=0,j=0;

    for(z=l;z<=m;z++)
    {
        arr1[i]=arr[z];
        i++;
    }
    for(z=m+1;z<=h;z++)
    {
        arr2[j]=arr[z];
        j++;
    }




  n1=i;
  n2=j;
  i=0;
  j=0;
  for(k=l; k<=h; k++)
  { //process of combining two sorted arrays

    if(i<n1 && j<n2)
    {
     if(arr1[i]<=arr2[j])
     {
          arr[k]=arr1[i++];
          }
    else
         arr[k]=arr2[j++];
     }
     else if(i>=n1)
     {
      arr[k]=arr[j++];
     }
     else
     {
     arr[k]=arr[i++];
     }


  }

  return 0;
}

错误部分

     else if(i>=n1)
     {
      arr[k]=arr[j++];
     }
     else
     {
     arr[k]=arr[i++];
     }

已更正(使用 arr1arr2 而不是 arr 作为作业来源)

     else if(i>=n1)
     {
      arr[k]=arr2[j++];
     }
     else
     {
     arr[k]=arr1[i++];
     }