高手帮忙看看,能运行,但结果错误的;
#include<stdio.h>
#include<stdlib.h>
typedef int RecType;
void Merge(RecType R[],int low,int mid,int high)
{
RecType *R1;//声明局部变量
int i=low,j=mid+1,k=0;
R1=(RecType*)malloc((high-low+1)*sizeof(RecType));
while(i<low&&j<high)
if(R[i]<R[j])
R1[k++]=R[i++];
else
R1[k++]=R[j++];
while(i<low)
{
R[i++]=R1[k++];
}
while(j<high)
{
R[j++]=R1[k++];
}
for(k=0,i=low;i<high;k++,i++)
R[i]=R1[k];
}
void MergePass(RecType R[],int length,int n)
{
int i;
for(i=0;i+2*length-1<n;i=i+2*length)
Merge(R,i,i+length-1,i+2*length);
if(i+length-1<n)
Merge(R,i,i+length-1,n-1);
}
void MergeSort(RecType R[],int n)
{
int length;
for(length=1;length<n;length=2*length)
MergePass(R,length,n);
}
void main()
{
int a[11]={10,9,8,7,6,5,4,3,2,1,0};
int n=11;
MergeSort(a,n);
for(int i=0;i<n;i++)
printf("%d",a[i]);
}
[解决办法]
- C/C++ code
void Merge(RecType R[],int low,int mid,int high){RecType *R1;//声明局部变量int [color=#FF0000]i=low[/color],j=mid+1,k=0; //是不是这儿有问题?R1=(RecType*)malloc((high-low+1)*sizeof(RecType));while([color=#FF0000]i<low[/color]&&j<high) //while不会执行if(R[i]<R[j])R1[k++]=R[i++];elseR1[k++]=R[j++];while([color=#FF0000]i<low[/color]){R[i++]=R1[k++];}while(j<high){R[j++]=R1[k++];}for(k=0,i=low;i<high;k++,i++)R[i]=R1[k];}
[解决办法]
int i=low,j=mid+1,k=0; //是不是这儿有问题?
R1=(RecType*)malloc((high-low+1)*sizeof(RecType));
while(i<low&&j<high) //while不会执行
if(R[i]<R[j])
R1[k++]=R[i++];
else
R1[k++]=R[j++];
while(i<low)
{
R[i++]=R1[k++];
}
[解决办法]
既然能运行,结果不对的话,就单步调试,这样才能进步较快。
[解决办法]
while(i<low&&j<high)
上面定义的i = low那么这个循环是不会执行的。
是不是应该这样呢,
while (i <= mid && j < high)