Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并排序函数在ANSI C中失败_C_Algorithm_Sorting_Mergesort - Fatal编程技术网

合并排序函数在ANSI C中失败

合并排序函数在ANSI C中失败,c,algorithm,sorting,mergesort,C,Algorithm,Sorting,Mergesort,我是个编程行乞者。。。我在课堂上被要求实现一个MergeSort-order算法,我被困在这一点上,数组管理肯定有一些问题,因为结果真的很奇怪,第一个数组没有重复的数字,结果一个数组有,它们没有排序。请帮忙 int Merge(int* array,int ip,int medio,int iu){ int* arrayaux=NULL,i=0,j=0,k=0,n=0, OB=0; if(ip<0 || iu<0 || medio<0 || ip>iu || medio

我是个编程行乞者。。。我在课堂上被要求实现一个MergeSort-order算法,我被困在这一点上,数组管理肯定有一些问题,因为结果真的很奇怪,第一个数组没有重复的数字,结果一个数组有,它们没有排序。请帮忙

int Merge(int* array,int ip,int medio,int iu){
int* arrayaux=NULL,i=0,j=0,k=0,n=0, OB=0;

if(ip<0 || iu<0 || medio<0 || ip>iu || medio>iu || medio < ip)
    return ERR;

if(ip==iu)
    return 1;

arrayaux=(int*)malloc((iu-ip+1)*sizeof(int));
if(arrayaux==NULL)
    return ERR;

i=ip;j=medio+1;k=0;
while(i<=medio && j<=iu){
    if(array[i]<array[j]){
        arrayaux[k]=array[i];
        i++;
    }
    else{
        arrayaux[k]=array[j];
        j++;
    }
    k++;OB++;
}
if(i>medio){
    while(j<=iu){
        arrayaux[k]=array[j];
        j++;k++;OB++;
    }
}
else if(j>iu){
    while(i<=medio){
        arrayaux[k]=array[i];
        i++;k++;OB++;
    }
}

  for(j = 0; j < iu; j++) {
    printf("%d \t", array[j]);
  }
  printf("\n");

/*Copia el array auxiliar en el array original*/
for(n=ip;n<iu;n++){
    array[n]=arrayaux[n-ip];
}
free(arrayaux);
return OB;
}   


int MergeSort(int *array,int ip, int iu){

int medio, OBizq, OBder,OBc;
if(array==NULL || ip>iu)
    return ERR;
else if (ip==iu)
    return 1;
else{
    medio=(ip+iu)/2;
    OBizq=MergeSort(array,ip,medio);
    if(OBizq==ERR)
        return ERR;
    OBder=MergeSort(array,medio+1,iu);
    if(OBder==ERR)
        return ERR;
    OBc=Merge(array,ip,medio,iu);
    if(OBc==ERR)
        return ERR;
    return OBc+OBizq+OBder;
}
}
int合并(int*数组、int-ip、int-medio、int-iu){
int*arrayaux=NULL,i=0,j=0,k=0,n=0,OB=0;

如果(ip)(1)尝试将问题隔离到仍然显示问题的最小可编译代码。(2)请提供测试用例+预期结果+实际结果。(3)尝试找出使用调试器的问题所在您现在的首要任务应该是学习一些基本的调试技术:您可以使用策略性放置的
printf
语句做很多事情,并且您还应该学习使用适当的调试器,如gdb或您的操作系统或IDE提供的任何调试器。