2012-09-15 1 views
-3

J'ai écrit le code suivant mergesort, mais il ne fonctionne pas. Pourriez-vous s'il vous plaît m'aider dans la résolution d'erreur. Il y a un problème dans la fonction de fusion, car il s'agit d'une adresse plutôt que de valeurs.Erreur dans 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

Quels résultats obtenez-vous, et * COMMENT * cela ne fonctionne-t-il pas? –

+0

Vous avez un débogueur, n'est-ce pas? Que diriez-vous de déboguer à travers un cas simple étape par étape? –

Répondre

0

Erreur dans la dernière boucle de fusion:

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]); 
} 

n'ont pas regardé beaucoup plus difficile que cela, mais il devrait être un très bon départ. Avec le code tel qu'il était, vous remplissez complètement votre tableau avec des déchets provenant de la mémoire non initialisée.

+0

merci beaucoup pour l'aide .... – vidzi