我的任务是仅实现合并排序算法的合并功能。我的想法是创建一个辅助数组来存储排序后的值。我维护了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 2 3 4 5 6 7 8 9 10
我的输出:分段故障
首先,这些行不需要malloc
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
并可以更改为
int *ptr1=&arr[l];
int * ptr2=&arr[m+1];
另一个问题是,测试NULL
的ptr2
,因为过去的最后一个元素的地址不工作是不是NULL
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句