首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求帮助,是个归并排序,小弟我是个初学者不知道那里错了,多谢大家

2013-04-20 
求帮助,是个归并排序,我是个菜鸟不知道那里错了,谢谢大家#includestdio.hvoid Merger(int *s1,int *s2,i

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

热点排行