-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 回答