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

C++实现Shakersort时报错invalid conversion from ‘int’ to ‘int*’排查

错误排查与修复方案

1. 编译报错直接原因

调用shakersort时传入的参数类型不匹配:

  • 代码中shakersort(realArray[up]);的realArray[up]是取下标为up的数组元素,类型为int,且该下标本身属于越界访问(长度为up的数组合法下标范围为0 ~ up-1)
  • shakersort函数要求的入参是int类型数组(实际调用时会退化为int*指针),直接传数组名realArray即可,数组名本身代表数组首元素的地址。

修复调用代码:

shakersort(realArray);

2. 其他隐藏逻辑错误

修复编译问题后运行仍会出现异常,需要同步修改以下问题:

  • 外层循环已经定义了计数变量i,内层第一个正向遍历的循环重复给i赋值,会打乱外层循环计数,导致排序次数异常
  • 内层第二个反向遍历的循环,更新条件误写为i--,实际应该是k--,否则k值永不变化会触发死循环
  • 反向遍历的大小判断逻辑写反,无法实现把小值上浮到数组头部的效果

修正后的完整shakersort函数:

void shakersort(int formArray[up]){
    for(int i=0; i<up/2;i++){
        // 正向遍历:把最大值沉到未排序区间末尾
        for (int j=0; j<up-1-i;j++){
            if(formArray[j]>formArray[j+1]){
                tauschen(&formArray[j], &formArray[j+1]);
            }
        }
        // 反向遍历:把最小值浮到未排序区间开头
        for (int k=up-1-i; k>i;k--){
            if(formArray[k]<formArray[k-1]){
                tauschen(&formArray[k], &formArray[k-1]);
            }
        }
    }
}

3. 结果验证

可以在主函数中添加输出代码验证排序效果:

int main()
{
    shakersort(realArray);
    for(int i=0;i<up;i++){
        cout << realArray[i] << " ";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:02