When i try to run my code using using recursion i get stuck in an infinite loop.

this is my first time implementing divide and conquer using recursion so i am a bit rusty on the concepts.
Please have a look at the code an let me know where i can correct it.
    
   
    /**
     * MergeSort.c
     *
     * Ujjwal Arora
     * 
     *
     * Implements merge sort for an array
     */

    #include<stdio.h>
    #include<conio.h>
    void merge(int array[6],int beg,int mid,int end);
    void mergesort(int array[6],int beg,int end);
    void display(int array[6]);
    
    int main(void)
    {
         // Initializes the array
         int array[6]={3,1,2,9,5,4};
         // Initialize the beginning and the end 
         int beg=0, end=5;
         // Implement the Merge Sort 
         mergesort(array,beg,end);
         getch();
    }
    void mergesort(int array[6],int beg,int end) //Calls Initial merge sort
    {
          int mid;
          
          if(beg<end)
          {
                mid=(beg+end)/2;
                mergesort(array,beg,mid);        //Left part of the array
                mergesort(array,mid+1,end);      //Right part of the array
                merge(array,beg,mid,end);        //merge two sorted arrays
          }
     }
    void merge(int array[6],int beg,int mid,int end)
    {
         int temp[6]; //Declare a temp array for storing the sorted data
         //Initialize the temp array
         int k=beg;
         //initialize the pointers for two sub arrays     
         int i=beg;
         int j=mid;
     
         while(i<=mid && j<=end)
           {
                if(array[i] < array[j])
                  {
                     temp[k]=array[i];
                     i++;                     
                  }
                else
                  {
                     temp[k]=array[j];
                     j++;                     
                  }
                     k++;              
            }            
        //Clearing any remaining elements in the sub array
         if(i>mid) 
          {
               for(int m=j;j<=end;m++)
               {
                      temp[k]= array[m];
                      k++;                      
               }               
          }        
        else 
          {
               for(int m=i;m<=mid;m++)
               {
                      temp[k]= array[m];
                      k++;
               }
          }
        //Reassign the sorted elements to the original array
        for(k=beg;k<end;k++)     
          {
              array[k]=temp[k];                                      
          }  
     display(array);           //display array
    }
    void display(int array[6])
    {
         for(int i=0;i<6;i++)
         {
                 printf("%d ",array[i]);
         }
         printf("\n");
    }