2012-09-15 33 views
-3

我写了以下mergesort代码,但它不起作用。你能帮我解决错误吗?合并函数中存在一些问题,因为它引发了一些地址而不是值。mergesort错误

#include<stdio.h> 
#include<string.h> 

void merge(int *s,int L,int H,int mid) 
{ 
    int temp[H-L+1]; 
    int i=L,j=mid+1,k=0; 
    while((i<=mid)&&(j<=H)) 
    { 
     if(s[i]<s[j]) 
     { 
      temp[k] = s[i]; 
      k++; 
      i++; 
     } 
     else 
     { 
      temp[k] = s[j]; 
      k++; 
      j++; 
     } 
    } 
     while(j<=H) 
     { 
      temp[k]=s[j]; 
      j++; 
      k++; 
     } 
     while(i<=mid) 
     { 
      temp[k] = s[i]; 
      i++; 
      k++; 
     } 

    int x=0; 
    for(x=0;x<=k-1;x++) 
    { 

     s[x+L] = temp[k]; 
     printf("%d\n",s[x+L]); 
    } 
} 

void mergesort(int i,int j,int *s) 
{ 
    int mid = (i+j)/2; 
    if(i<j) 
    { 
     mergesort(i,mid,s); 
     mergesort(mid+1,j,s); 
     merge(s,i,j,mid);  
     printf("after merging\n"); 
    } 
    else 
    { 
     printf("in the base case\n"); 
     return; 

    } 
} 


int main() 
{ 
    int str[50]; 
    printf("enter the array\n"); 
    int i,n; 
    printf("enter n"); 
    scanf("%d",&n); 
    printf("enter the array\n"); 
    for(i=0;i<n;i++) 
    { 
     scanf("%d",&str[i]); 
    } 
    for(i=0;i<n;i++) 
    { 
     printf("%d",str[i]); 
    } 
    mergesort(0,n-1,str); 
    for(i=0;i<n;i++) 
    { 
     printf("%d",str[i]); 
    } 


} 
+0

你会得到什么结果,以及*如何*它不起作用? –

+0

你有一个调试器的上帝,不是吗?如何通过一个简单的案例逐步调试? –

回答

0

错误合并的最后一环:

for(x=0;x<=k-1;x++)   // (I would use x<k instead of x<=k-1) 
{ 
    s[x+L] = temp[k];   // Should be temp[x] not temp[k] 
    printf("%d\n",s[x+L]); 
} 

没有看过比这更困难,但它应该是一个不错的开始。通过代码,您可以完全用未初始化的内存填充垃圾。

+0

非常感谢您的帮助.... – vidzi