C++实现数组最大元素与末尾元素交换及代码修正
数组最大值交换逻辑的代码修正
原代码踩的坑
- 代码块位置放错:查找最大值的循环里,把交换、打印的代码直接缩到了循环体内部,根本没等遍历完整个数组找到真正的最大值位置,就开始做交换操作,每跑一次循环就交换一次、打印一次,逻辑完全乱掉。
- 循环变量共用翻车:找最大值用的循环变量
i,和后续打印数组用的i是同一个变量,打印的时候把i加到数组长度值,直接把外层找最大值的循环给打断了,根本没遍历完所有元素。 - 冗余无效代码:定义了
imin但从头到尾没用到,属于多余代码,不影响运行但没必要保留。
修正后的可运行代码
#include <iostream> using namespace std; int main() { int i, arr[100], n; cin >> n; // 读入N个数组元素 for (int i = 0; i < n; i++) { cin >> arr[i]; } // 完整遍历找到最大值所在的下标 int max_idx = 0; for (i = 1; i < n; i++) { if (arr[i] > arr[max_idx]) max_idx = i; } // 遍历完确定最大值位置后,再执行一次交换 int tmp = arr[max_idx]; arr[max_idx] = arr[n - 1]; arr[n - 1] = tmp; // 统一输出处理后的数组 for (i = 0; i < n; i++) { cout << arr[i] << " "; } cout << "\n"; return 0; }
运行效果校验
用提供的测试用例验证:
输入内容:
8 3 6 12 1 7 19 25 4
程序会定位到数组里最大值25的下标是6,把这个位置的元素和数组末尾(下标7)的4交换,最终输出结果:3 6 12 1 7 19 4 25
和预期的样本输出完全匹配。
内容的提问来源于stack exchange,提问作者Andrij Matviiv
相关产品推荐
相关产品推荐

