求帮助,是个归并排序,我是个菜鸟不知道那里错了,谢谢大家

heartzhizi 2013-04-17 08:30:18
#include<stdio.h>

void Merger(int *s1,int *s2,int low,int mid,int high)
{
int i=low,j=mid+1,k=0;

while(i<=mid&&j<=high)
{

if(s1[i]>s1[j])
s2[k++]=s1[j++];
else
s2[k++]=s1[i++];
}
while(i<=mid)
s2[k++]=s1[i++];
while(j<=high)
s2[k++]=s1[j++];
}

void Msort(int *s,int *p,int low,int high)
{
int sf[10];
int mid;
if(low==high) p[low]=s[low];
else
{
mid=(low+high)/2;
Msort(s,sf,low,mid);//递归的将s[low...mid]归并为sf[low....mid],sf是个中间变量
Msort(s,sf,mid+1,high);
Merger(sf,p,low,mid,high);

}

}
int main()
{
int s[10]={10,2,3,1,6,5,8,9,7,4};
int sf[10],i;

Msort(s,sf,0,9);

for(i=0;i<10;i++)
printf("%d\n",sf[i]);

getchar();
getchar();
return 0;

}
...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartzhizi 2013-04-19
  • 打赏
  • 举报
回复
谢谢了,找到错误了,是Merger函数里的k的赋值应该为low
ForestDB 2013-04-17
  • 打赏
  • 举报
回复
问题的解决从代码的格式化开始。

# include <stdio.h>

void Merger(int * s1, int * s2, int low, int mid, int high)
{
    int i = low, j = mid + 1, k = 0;

    while (i <= mid && j <= high)
    {
        if (s1[i] > s1[j])
            s2[k++] = s1[j++];
        else
            s2[k++] = s1[i++];
    }
    while (i <= mid)
        s2[k++] = s1[i++];
    while (j <= high)
        s2[k++] = s1[j++];
}

void Msort(int * s, int * p, int low, int high)
{
    int sf[10];
    int mid;
    if (low == high)
        p[low] = s[low];
    else
    {
        mid = (low + high) / 2;
        Msort(s, sf, low, mid); //递归的将s[low...mid]归并为sf[low....mid],sf是个中间变量
        Msort(s, sf, mid + 1, high);
        Merger(sf, p, low, mid, high);
    }
}

int main()
{
    int s[10] = { 10, 2, 3, 1, 6, 5, 8, 9, 7, 4 };
    int sf[10], i;

    Msort(s, sf, 0, 9);

    for (i = 0; i < 10; i++)
        printf("%d\n", sf[i]);

    getchar();
    getchar();

    return 0;
}
heartzhizi 2013-04-17
  • 打赏
  • 举报
回复
求助啊,大家帮一下忙

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧