我是编程的初学者......我在课堂上被要求实现一个 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;
}
}
函数必须遵循该定义。