使用if语句实现三个整数升序排序出错,求解决方法
解决三个整数升序排序的问题
嘿,我来帮你排查这个排序异常的问题~
问题根源
你的代码里用了链式的else if判断,这是导致排序失败的关键!else if的逻辑是:只要前面的某个条件成立,后面的所有判断都会被直接跳过,不会执行。
拿你输入的8、6、3举例:
- 第一个条件
a > b(8>6)成立,交换后a=6,b=8,c=3; - 因为第一个if已经执行了,后面的
else if (b > c)和else if (c > a)都不会被触发,所以c=3根本没机会被交换到正确的位置,最终输出6、8、3。
修正方案:用独立的if做完整两两比较
要给三个数正确升序排序,需要确保每一对数都被比较到,而且每一步的判断都是独立的,不受前面结果的影响。我们可以分三步来保证顺序:
- 先确保
a是三个数里最小的; - 再确保
b是剩下两个数里较小的; - 最后
c自然就是最大的。
修正后的代码如下:
#include <stdio.h> int main() { int a, b, c, temp; scanf("%d %d %d", &a, &b, &c); // 确保a <= b if (a > b) { temp = a; a = b; b = temp; } // 确保a <= c(此时a可能还是比c大,比如交换b后) if (a > c) { temp = a; a = c; c = temp; } // 确保b <= c(经过前两步后,b可能还是比c大) if (b > c) { temp = b; b = c; c = temp; } printf("%d %d %d", a, b, c); return 0; }
测试验证
用输入8、6、3测试:
- 第一步交换
a和b,得到6、8、3; - 第二步比较
a=6和c=3,交换后得到3、8、6; - 第三步比较
b=8和c=6,交换后得到3、6、8;
最终输出正确的升序结果。
内容的提问来源于stack exchange,提问作者Maryam
相关产品推荐
相关产品推荐

