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