-3

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


}
4

1 に答える 1

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

それよりもそれほど難しくは見えませんでしたが、かなり良いスタートになるはずです。コードをそのまま使用すると、初期化されていないメモリからのゴミで配列を完全に埋めることになります。

于 2012-09-15T09:58:35.333 に答える