Моя задача - реализовать только функцию слияния алгоритма сортировки слиянием. Моя идея - создать вспомогательный массив для хранения отсортированных значений. Я установил 2 указателя, один для левого отсортированного массива и другой для правого отсортированного массива.
Мне трудно понять, почему я получаю ошибку сегментации?
void merge(int arr[], int l, int m, int r)
{
int temp[r-l+1];int count=0;
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
while(ptr1!=(&arr[m+1]) && ptr2!=NULL)
{
if(*ptr1>=*ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
else
{
temp[++count]=*ptr1;
ptr1++;
}
}
if(ptr1==&arr[m+1])
{
while(ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
}
if(ptr2==NULL)
{
while(ptr1!=&arr[m+1])
{
temp[++count]=*ptr1;
ptr1++;
}
}
for(int i=0;i<r-l+1;i++)
{
arr[i]=temp[i];
}
}
Ввод: 2
5
4 1 3 9 7
10
10 9 8 7 6 5 4 3 2 1
Ожидаемый результат:
1 3 4 7 9
1 23 4 5 6 7 8 9 10
Мой выход: ошибка сегментации