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
相关产品推荐
相关产品推荐

