Skip to main content
4 of 4
added 218 characters in body

Merge Sort running into infinite loop using recursion

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");
}