C 合并排序程序出错

C 合并排序程序出错,c,algorithm,sorting,data-structures,merge,C,Algorithm,Sorting,Data Structures,Merge,我正在用C语言编写一个合并排序程序,但得到了一些意想不到的输出。 有人能找出程序中的错误吗 #include<stdio.h> int array[100],n; void merge(int l,int m,int h); void mergesort(int start,int end); main(){ int i; printf("Enter Size: "); scanf("%d",&n); f

我正在用C语言编写一个合并排序程序,但得到了一些意想不到的输出。 有人能找出程序中的错误吗

   #include<stdio.h>

    int array[100],n;
    void merge(int l,int m,int h);
    void mergesort(int start,int end);
    main(){
    int i;
    printf("Enter Size: ");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&array[i]);      
    }
    mergesort(0, n-1);
    for(i=0;i<n;i++){
        printf("%d\n",array[i]);        
        }
    }

    void mergesort(int start,int end){
    int mid;
    if(start<end){
        mid=(start+end)/2;
        mergesort(start,mid);
        mergesort(mid+1,end);
        merge(start,mid,end);
        }
     }

    void merge(int start,int mid,int end){
    int i,j,k;
    int a1[100],a2[100];

    for(k=0,i=start;i<=mid;i++,k++){
        a1[k]=array[i];
    }
    for(k=0,j=i;j<=end;j++,k++){
        a2[k]=array[j]; 
    }
    a1[mid]=999;
    a2[j]=999;
    i=0;j=0;
    for(k=start; k <=end; k++)
    {
        if(a1[i]<=a2[j])
            array[k]=a1[i++];
        else
            array[k]=a2[j++];
    }
}

对于较大的阵列,输出更混乱。我认为merge()函数中有错误。

您在错误的位置终止a1和a2数组

尝试更改:

for(k=0,i=start;i<=mid;i++,k++){
    a1[k]=array[i];
}
for(k=0,j=i;j<=end;j++,k++){
    a2[k]=array[j]; 
}
a1[mid]=999;
a2[j]=999;

for(k=0,i=start;i您在错误的位置终止a1和a2阵列

尝试更改:

for(k=0,i=start;i<=mid;i++,k++){
    a1[k]=array[i];
}
for(k=0,j=i;j<=end;j++,k++){
    a2[k]=array[j]; 
}
a1[mid]=999;
a2[j]=999;

for(k=0,i=start;i创建临时数组时:

for (k = 0, i = start; i <= mid; i++, k++) {
    a1[k] = array[i];
}
a1[i] = 999;
即便如此,
k
i
的双控结构还是很笨拙。而且不需要猜测一个高的数字;
为大多数类型的最小值和最大值定义了常数:

k = 0;
for (i = start; i <= mid; i++) {
    a1[k++] = array[i];
}
a1[k] = INT_MAX;
k=0;

对于(i=start;i创建临时数组时:

for (k = 0, i = start; i <= mid; i++, k++) {
    a1[k] = array[i];
}
a1[i] = 999;
即便如此,
k
i
的双控结构还是很笨拙。而且不需要猜测一个高的数字;
为大多数类型的最小值和最大值定义了常数:

k = 0;
for (i = start; i <= mid; i++) {
    a1[k++] = array[i];
}
a1[k] = INT_MAX;
k=0;
对于(i=start;i我已经解决了它
a[mid+1]=999
a[k]=999

我已经解决了它
a[mid+1]=999
a[k]=999