为什么我的合并排序实现会返回奇怪的数字?

时间:2015-01-18 11:31:20

标签: c++ arrays mergesort

以下是我的代码 -

#include<iostream>
#include<cstdlib>

using namespace std;

void MergeSort(int*,int,int);
void Merge(int*,int*,int*,int,int,int);

int main()
  {
  int a[10];
  for(int i=0;i<10;i++)
     cin>>a[i];

  cout<<"The unsorted array is : ";
  for(int i=0;i<10;i++)
     cout<<a[i]<<" ";

  MergeSort(a,0,10);

  cout<<"\n\n The Sorted array is : ";
  for(int i=0;i<10;i++)
     cout<<a[i]<<" ";

  return 0;  
}

void MergeSort(int *a,int l,int h)
  {
    int m = (l+h)/2;

    int l1 = m-l;
    int h1 = h-m;

    int *lp = (int*)malloc(l1*sizeof(int));
    int *rp = (int*)malloc(h1*sizeof(int));

    for(int i=l,j=0;i<m;i++,j++)
       {
          lp[j] = a[i];
       }

    for(int i=m,j=0;i<h;i++,j++)
       {
          rp[j] = a[i];
       }

    if(l1 != 1)
      MergeSort(lp,l,m);
    if(h1 != 1)
    MergeSort(rp,m,h);

    Merge(lp,rp,a,l1,h1,(h-l));
}

void Merge(int *lp,int *rp,int *a,int l1,int h1,int b)
{
    int i,j,k;
    i=j=k=0;

    while(i<l1 && j<h1)
        {
            if(lp[i] <= rp[j])
              {
                a[k] = lp[i];
                i++;
              }
            else if(lp[i] > rp[j])
                 {
                   a[k] = rp[j];
                   j++;
                 }
            k++;
        }
    while(i<l1)
         {
            a[k] = lp[i];
            i++;k++;
         }
    while(j<h1)
         {
            a[k] = rp[j];
            j++;k++;
         }
}    

对于给定的输入,如1 5 2 4 3 6 7 9 8 7 输出是 - 0 0 1 3 5然后是一些大数字,如46977154等。 我无法在代码中找出问题。

1 个答案:

答案 0 :(得分:0)

我发现了错误:

MergeSort(rp,m,h)

这应该是

MergeSort(rp,l,h-m)

其余的都是正确的。