0

我是编程的初学者......我在课堂上被要求实现一个 MergeSort 排序算法,我一直坚持这个,数组管理一定有问题,因为结果真的很奇怪,第一个数组没有重复数字,结果一个,它们没有排序。请帮忙。

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;
}
}

函数必须遵循该定义。

4

0 回答 0