You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

归并排序算法代码无法编译运行,请求错误排查与修复

C语言归并排序代码编译错误排查与修复

编译错误原因及修复点

  1. merge函数数组赋值变量误用
    在merge函数的第二个for循环中,错误使用了变量i给a2数组赋值,正确应使用循环变量j:
    原错误代码片段:
for(j=0;j<n2;j++)
{
    a2[i]=arr[mid+1+j];
}

修复后:

for(j=0;j<n2;j++)
{
    a2[j]=arr[mid+1+j];
}
  1. 函数声明缺失
    main函数中调用了mergesort和merge,但这两个函数的定义在main之后,C编译器会默认认为函数返回int类型,与实际的void返回类型冲突,导致编译错误。需在main函数前添加函数声明:
void merge(int arr[],int left,int mid,int right);
void mergesort(int arr[],int left,int right);
  1. main函数返回类型不符合标准
    标准C语言中,main函数的返回类型必须是int,void main()属于非标准写法,部分编译器会报错。需修改为:
int main()
{
    // 原有代码逻辑
    return 0;
}

修复后的完整代码

#include<stdio.h>
#include<stdlib.h>

// 提前声明函数
void merge(int arr[],int left,int mid,int right);
void mergesort(int arr[],int left,int right);

void merge(int arr[],int left,int mid,int right)
{
    int i,j,k;
    int n1,n2;
    n1=mid-left+1;
    n2=right-mid;
    int a1[n1],a2[n2];
    for(i=0;i<n1;i++)
    {
        a1[i]=arr[left+i];
    }
    for(j=0;j<n2;j++)
    {
        a2[j]=arr[mid+1+j]; // 修复变量误用问题
    }
    i=0;
    j=0;
    k=left;
    while(i<n1 && j<n2)
    {
        if(a1[i]<=a2[j])
        {
            arr[k]=a1[i];
            i++;
        }
        else
        {
            arr[k]=a2[j];
            j++;
        }
        k++;
    }
    while(i<n1)
    {
        arr[k]=a1[i];
        i++;
        k++;
    }
    while(j<n2)
    {
        arr[k]=a2[j];
        j++;
        k++;
    }
}

void mergesort(int arr[],int left,int right)
{
    if(left<right)
    {
        int mid=left+(right-left)/2;
        mergesort(arr,left,mid);
        mergesort(arr,mid+1,right);
        merge(arr,left,mid,right);
    }
}

int main() // 修复main函数返回类型
{
    int n,i;
    printf("Enter the number of elements in the array:");
    scanf("%d",&n);
    int arr[n];
    for(i=0;i<n;i++)
    {
        printf("Enter the Element %d:",i+1);
        scanf("%d",&arr[i]);
    }
    mergesort(arr,0,n-1);
    printf("The Elements in the array sorted are:");
    for(i=0;i<n;i++)
    {
        printf("%d->",arr[i]);
    }
    return 0; // 添加标准返回语句
}

内容的提问来源于stack exchange,提问作者H_V123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:55:23