void mergeSort(int array[], int length);
void merge(int leftarray[], int rightarray[], int array[], int length);

int main(int argc, string argv[])
{

    int unsorted[] = {9, 3, 6, 1, 4, 5, 2, 8, 7};
    int length = sizeof(unsorted) / sizeof(int);

    printf("unsorted array: \n");
    for (int i = 0; i < length; i++)
    {
        printf("%d", unsorted[i]);
    }
    printf("\n");

    
    mergeSort(unsorted, length);
    printf("sorted array: \n");
    for (int i = 0; i < length; i++)
    {
        
        printf("%d", unsorted[i]);
    }
    printf("\n");
}

void mergeSort(int array[], int length)
{
    
    
    if(length <= 1)
    {
        return;
    }
    
    int middle = length / 2;
    int leftarray[middle];
    int rightarray[length - middle];
    

    for (int i = 0, j = 0; i < length; i++)
    {
        if(i < middle)
        {
            leftarray[i] = array[i];
        }
        else
        {
            rightarray[j] = array[i];
            j++;
        }

    }
   
    mergeSort(leftarray, length);
    mergeSort(rightarray, length);
    merge(leftarray, rightarray, array, length);


}

void merge(int leftarray[], int rightarray[], int array[], int length)
{
    
    int leftSize = length / 2;
    int rightSize = length - leftSize;

    int a = 0; 
    int l = 0; 
    int r = 0; 

    while(l < leftSize && r < rightSize)
    {
        if (leftarray[l] < rightarray[r])
        {
            array[a] = leftarray[l];
            l++;
            a++;
        }
        else
        {
            array[a] = rightarray[r];
            r++;
            a++;
        }
    }

    while(l < leftSize)
    {
        array[a] = leftarray[l];
        l++;
        a++;
    }
    while(r < rightSize)
    {
        array[a] = rightarray[r];
        r++;
        a++;
    }
}

been at it for an hour trying to figure out how to fix the problem but no luck

1

There are 1 best solutions below

0
MikeCAT On

This part of your mergeSort function is wrong:

    mergeSort(leftarray, length);
    mergeSort(rightarray, length);

You are passing the same length as the input here, so this will become an infinite recursion (or runtime error may happen for out-of-range array access).

The part should be:

    mergeSort(leftarray, middle);
    mergeSort(rightarray, length - middle);