合并排序的合并功能的分段错误

河内

我的任务是仅实现合并排序算法的合并功能。我的想法是创建一个辅助数组来存储排序后的值。我维护了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

我的输出:分段故障

贝Pe铭

首先,这些行不需要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];

另一个问题是,测试NULLptr2,因为过去的最后一个元素的地址不工作是不是NULL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章