读书人

求帮助是个归并排序小弟我是个初学

发布时间: 2013-04-20 19:43:01 作者: rapoo

求帮助,是个归并排序,我是个菜鸟不知道那里错了,谢谢大家
#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;

}
[解决办法]
问题的解决从代码的格式化开始。


# 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;
}

读书人网 >C语言

热点推荐