【发布时间】:2015-03-14 12:43:12
【问题描述】:
#include<stdio.h>
void merge(int a[],int left[],int l,int right[],int r){
int i=0,j=0,k=0;
while(i<l&&j<r){
if(left[i]<=right[j]){
a[k]=left[i];
k++;
i++;
}
else{
a[k]=right[j];
k++;
j++;
}
}
while(i<l){
a[k]=left[i];
k++;
i++;
}
while(j<r){
a[k]=right[j];
k++;
j++;
}
}
void mergesort(int a[],int s,int n){
int i;
int mid=(s+n)/2;
int left[mid],right[n-mid];
if(n<2) return;
else{
for(i=s;i<mid;i++){
left[i]=a[i];
}
for(i=mid;i<n;i++){
right[i]=a[i];
}
mergesort(left,s,mid);
mergesort(right,n-mid,n);
merge(a,left,mid,right,n-mid);
}
}
int main(int argv,char*argc){
int a[]={9,8,7,5,1,2,4,3,6},i;
printf("sorting....");
mergesort(a,0,9);
for(i=0;i<10;i++){
printf("\n");
printf("%d",a[i]);
}
return 1;
}
程序在给出输出之前终止...请帮助.. 逻辑取自mycodeschool.org
【问题讨论】:
-
乍一看,您的
mergesort接受大于2 的n值,只要n保持大于2,它就会继续执行。但是您递归调用@ 987654326@ 具有相同的n值,因此您将获得无限递归。 -
那么先生,我该怎么办?
-
尝试修复你的代码逻辑。你为什么用相同的值调用
mergesort? -
同值先生是什么意思?
-
不用叫我先生 :),我的意思是,看
mergesort(right,n-mid,n);.. 你的第三个参数在递归调用中没有改变(导致无限递归)。您要么递归调用了错误的函数,要么if(n<2) return;不足以停止递归。
标签: c algorithm sorting data-structures