以下是我的代码 -
#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等。 我无法在代码中找出问题。
答案 0 :(得分:0)
我发现了错误:
MergeSort(rp,m,h)
这应该是
MergeSort(rp,l,h-m)
其余的都是正确的。