Hello I've got this implementation of merge sort:
void merge(Person **arr[], int firstElement, int midElement, int lastElement)
{
int firstHalfSize = midElement - firstElement + 1;
int secondHalfSize = lastElement - midElement;
Person *firstHalfArray[firstHalfSize];
Person *secondHalfArray[secondHalfSize];
char *p;
char *s;
for (int i = 0; i < firstHalfSize; i++)
{
firstHalfArray[i] = *arr[firstElement + i];
}
for (int j = 0; j < secondHalfSize; j++)
{
secondHalfArray[j] = *arr[midElement + 1+ j];
}
int index1 = 0;
int index2 = 0;
int mergedArrIndex = firstElement;
while (index1 < firstHalfSize && index2 < secondHalfSize)
{
if ((*firstHalfArray)[index1].id <= (*secondHalfArray)[index2].id)
{
arr[mergedArrIndex] = &firstHalfArray[index1];
index1++;
}
else
{
arr[mergedArrIndex] = &secondHalfArray[index2];
index2++;
}
mergedArrIndex++;
}
while (index1 < firstHalfSize)
{
arr[mergedArrIndex] = &firstHalfArray[index1];
mergedArrIndex++;
index1++;
}
while(index2 < secondHalfSize)
{
arr[mergedArrIndex] = &secondHalfArray[index2];
mergedArrIndex++;
index2++;
}
}
void mergeSort(Person **arr, int firstElement, int lastElement)
{
if (firstElement < lastElement)
{
int midElement = (firstElement + lastElement) / 2;
mergeSort(arr, firstElement, midElement);
mergeSort(arr, midElement + 1, lastElement);
merge(&arr, firstElement, midElement, lastElement);
}
}
And a pointer to a an array of structs that is Person *arrPersons
The struct of person is as the following:
typedef struct Person
{
char name[MAX_LENGTH_LINE];
long id;
float age;
} Person;
I'm calling the function in the main with:
mergeSort(&arrPersons, 0, 19);
(I have a list of 20 persons) where arrPersons is defined as Person *arrPersons
And I'm trying to sort all of those persons by their id. I don't see why my merge sort is failing, I keep receiving a segmentation fault. Thank you for your help