私はプログラミングの初心者です...クラスで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;
}
}
関数はその定義に従わなければなりません。