请大家帮我找错,一个合并排序,结果 不对
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define INFI 32766
void Merge(int A[],int p,int q,int r)
{
int k=0;
int n1=q-p+1;
int n2=r-q;
int *L=new int[n1+1];
int *R=new int[n2+1];
for(int i=0;i<n1;i++)
{
L[i]=A[p+i];
}
for(int j=0;j<n2;j++)
{
R[j]=A[q+1+j];
}
L[n1]=R[n2]=INFI;
i=j=0;
while(L[i]!=INFI&&R[j]!=INFI)
{
if(L[i]<=R[j])
{
A[k]=L[i];
i++;
k++;
}
else
{
A[k]=R[j];
j++;
k++;
}
}
if(L[i]!=INFI) //将剩余的元素复制到数组中
{
while(L[i]!=INFI)
{
A[k]=L[i];
i++;
k++;
}
}
if(R[j]!=INFI)
{
while(R[j]!=INFI)
{
A[k]=R[j];
j++;
k++;
}
}
delete L,R;
}
void Merge_sort(int A[],int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
Merge_sort(A,p,q);
Merge_sort(A,q+1,r);
Merge(A,p,q,r);
}
}
int main()
{
int a[10]={5,2,9,7,4,1,10,3,6,8};
for(int i=0;i<10;i++)
{
printf("%4d",a[i]);
}
Merge_sort(a,0,9);
putch(10);
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
getch();
return 0;
}
[解决办法]
在void Merge(int A[],int p,int q,int r)函数值给k赋初值p就可以了。
int k=0;改成:
int k = p ;