归并排序C语言实现,跟严蔚敏数据结构书上的代码差不多,报错

Python07

归并排序C语言实现,跟严蔚敏数据结构书上的代码差不多,报错,第1张

你的变量定义和使用不符合C语言规范:所有变量必须先定义后使用。

更改代码如下(只需要修改一下顺序就好):

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的头文件