c语言归并排序我的代码和结果截图,求大佬告知哪里错了
#include<stdio.h>
void merge(int *a,int *q,int s,int m,int t);
void mergesort(int *a,int *q,int s,int t);//分治函数
int main(void)
{
int k;
printf("input 数组元素个数\n");
scanf("%d",&k);
int a[k];//原数组
int q[k];//中间数组
printf("input array's 元素 orderly\n");
for(int i=0;i<k;i++)
{
scanf("%d",&a[i]);
}
printf("before sort the array are\n");
for(int i=0;i<k-1;i++)
{
printf("%d ",a[i]);
}
printf("%d",a[k-1]);
//以上是初始化
mergesort(a,q,0,k-1);
printf("the array after sort are\n");
for(int i=0;i<k-1;i++)
{
printf("%d ",a[i]);
}
printf("%d",a[k-1]);
return 0;
}
void mergesort(int *a,int *q,int s,int t)
{
int m;
if(s==t)
q[s]=a[s];
else
{
m=(s+t)/2;
mergesort(a,q,s,m);
mergesort(a,q,m+1,t);
merge(a,q,s,m,t);
}
}
void merge(int *a,int *q,int s,int m,int t)
{
int i=s;//i是a的脚标
int j=m+1;
int k =s;//k是q脚标
int l=0;
while(i<=m&&j<=t)
{
if(a[i]<a[j])
{
q[k++]=a[i++];
}
else
{
if(a[j]<a[i])
q[k++]=a[j++];
else
{
q[k++]=a[i]++;
j++;
}
}
}
while(i<=m)
{
q[k++]=a[i++];
}
while(j<=t)
{
q[k++]=a[j++];
}
for(l=0;l<t-s;l++)
a[s+l]=q[s+l];
}