更改代码如下(只需要修改一下顺序就好):
int T[4]
int i
MSort(a, T, 0, 3)
亲测编译通过,望采纳!
void MergeSort(int x[],int n) { //非递归归并排序//元素数组为x,其长度为n
int i,j,k1,k2,l
int *a
for(i=1i<=n-1i=i*2)//i为插入排序的子段长度
{
for(j=1j<=n-1j=j+2*i)//j为进行插入排序的子段起始位置
{
a=(int *)malloc(2*i*sizeof(int))
l=0k1=jk2=j+i
while((l<2*i)&&(k2<=n-1)&&(k2<j+2*i)&&(k1<j+i))
{//子段中,比较,移至辅助内存
if(x[k1]<x[k2])
{
a[l++]=x[k1]k1++
}
else
{
a[l++]=x[k2]k2++
}
}
if((k2>n-1)||(k2>=j+2*i))
{//子段的后一段超出数组范围
for(k1<j+ik1++)
a[l++]=x[k1]
}
else//就只有第一段就超数组了
{
if(k1>=j+i)
{
for((k2<j+2*i)&&(k2<=n-1)k2++)
a[l++]=x[k2]
}
}
for(k1=0k1<lk1++)//最后移位
{
x[j+k1]=a[k1]
}free(a)
}
}
}
非递归的归并排序,我以前写的。
中间malloc与free的话,是为了方便管理不定大小的空间,这里需要malloc.h的头文件