我的任务是仅实现合并排序算法的合并功能。我的想法是创建一个辅助数组来存储排序后的值。我维护了2个指针,一个指针用于左排序数组,另一个用于右排序数组。 / p>
我很难弄清楚为什么我会遇到细分错误?
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
我的输出:细分错误
答案 0 :(得分:0)
首先,这些行不需要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
的{{1}}的测试不起作用,因为最后一个元素后面的地址不是ptr2
。