Search code examples
carraysalgorithmsortingmergesort

recursive Merge Sort is not working


I programmed a recursive merge sort algorithm in C. But it is not working.

#include <stdio.h>

This is my Algorithm:

void mearge( int a[],int elementsOfA,int b[],int elementsOfB,int c[]){

    int elementsOfC = elementsOfB + elementsOfA;
    int i=0,j=0,k=0;

    while(k<elementsOfC){
        if(a[i]<=b[j] || j==elementsOfB) {
            c[k]=a[i];
            i++;
            k++;
        }

        if(b[j]<a[i] || i==elementsOfA) {
            c[k]=b[j];
            j++;
            k++;
        }
    }
}

void meargeSort(int a[], int indexOfLeft, int positionOfRight, int b[]){

    if(positionOfRight-indexOfLeft==1){
        b[0]=a[indexOfLeft];
    }

    if(positionOfRight-indexOfLeft>1){
       int mid = (positionOfRight+indexOfLeft)/2;
       //int left[mid-1],right[positionOfRight-mid];
       int left[mid],right[positionOfRight-mid];

       meargeSort(a,indexOfLeft,mid,left);
       meargeSort(a,mid,positionOfRight,right);
       mearge(left,mid-indexOfLeft,right,positionOfRight-mid,b);
    }
}

Here is my main function. I am giving two different inputs to the algotithm:

  • First is array arr
  • Second is array brr.

In both cases, output is improper sort

int main(int argc, char **argv)
{
    int i, arr[]={5,42,31,1,-1,23,0}, brr[7];

    meargeSort(arr,0,7,brr);

    //int i, brr[]={-1,23,0},brr[3];
    //meargeSort(arr,0,3,brr);

    for(i=0;i<7;i++)
        printf("%d ",brr[i]);

    return 0;
}

Solution

  • fix like as

    while(k<elementsOfC){
        if(j == elementsOfB || i != elementsOfA &&  a[i] <= b[j]){//need check `i`
            c[k++]=a[i++];
        } else if(i == elementsOfA || b[j] < a[i]){
            c[k++] = b[j++];
        }
    }