【发布时间】:2018-05-02 08:39:02
【问题描述】:
我正在尝试在 c 中实现 merge_sort(recursive),但函数 myMergesort 似乎继续执行除法部分并且永远不会进入合并部分
我使用的是伪代码:
mergeSort (array A, index i, index f, array X)
/* Order A[i..f − 1] using X as auxiliary array */
if more than 1 element then
m ← (i + f)/2
mergeSort(A, i, m, X)
mergeSort(A, m, f, X)
merge(A, i, m, f, X)
我的代码是:
void myMergesort(int a[], int i ,int f,int x[]){
nloop++;//global variable to count number of iterations
//if I don't do this infinite loop and segmentation fault
if(nloop>20){
printf("infinite loop :(\n");
exit(EXIT_FAILURE);
}
if(f>1){
printArr(a,i,f-1);//prints elements of arr a from i to f-1
int m = (f+i)/2;
printf("myMergesort(a,%d,%d,x)\n",i,m);
myMergesort(a,i,m,x);
printf("myMergesort(a,%d,%d,x)\n",m,f);
myMergesort(a,m,f,x);
merge(a,i,m,f,x);
}
else printf("this part of the array already ordered\n");
}
对包含 5 1 的数组调用 mergeSort 输出为:
myMergesor(a,0,2,x)
5 1
myMergesor(a,0,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
this part of the array already ordered
myMergesor(a,1,2,x)
1
myMergesor(a,1,1,x)
infinite loop :(
我确信错误出现在 myMergesort 函数中,因为我检查过它从未进入合并部分; 但以防万一.., 我在 main 中这样称呼它:
int main(int argc, char *argv[]){
//input of integers from command line
int sequenza[argc-1];
for(int i=1; i<argc; i++){
sequenza[i-1]=atoi(argv[i]);
}
algoMergesort(sequenza,argc-1);
//print result
printArr(sequenza,0,argc-2);
}
void algoMergesort(int a[], int n){
int x[n];
printf("myMergesor(a,0,%d,x)\n",n);
myMergesort(a,0,n,x);
}
提前谢谢你
【问题讨论】:
标签: c algorithm sorting recursion