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:
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;
}
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++];
}
}