向有序数组插入数字并排序的C语言代码运行结果异常问题咨询
已排序数组插入指定元素的代码问题修复
存在的问题
- 插入值赋值错误:for循环初始化部分写的是
a[6] == 21,这是相等判断操作,不是赋值操作,导致你要插入的21根本没有写入数组,a[6]仍保持初始化的0值,这是输出开头出现0的核心原因。 - 循环判断顺序存在越界风险:现有循环条件
a[i] <a[i-1] && i > 0会先访问数组元素再判断i是否合法,当i递减到0时,会先执行a[i] <a[i-1]访问a[-1],触发数组越界,属于未定义行为。
修复后的代码
int a[10] = {20, 22, 23, 24, 25, 26}, i, t, n; // 先给插入位置赋值要插入的21,再从该位置向前冒泡调整 for(i=6, a[6] = 21; i > 0 && a[i] < a[i-1]; i--) { t = a[i]; a[i] = a[i-1]; a[i-1] = t; } for(n = 0; n < 10; n++) printf("%4d",a[n]); printf("\n"); return 0;
输出结果
修复后运行输出为: 20 21 22 23 24 25 26 0 0 0,符合预期的有序插入效果。
内容的提问来源于stack exchange,提问作者灰原哀
相关产品推荐
相关产品推荐

