酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C++入门:选择查找法求数组中第二小的值

好的,我来用C++入门级的方法帮你实现这个功能。你提供的算法思路非常清晰,就是“**选择排序法**”的简化版——只做两次交换,找到前两个最小的数。 以下是完整的C++代码实现,并附有详细的解释。 ## 📘 代码实现 ```cpp #include <iostream> // 输入输出流 using namespace std; // 使用标准命名空间 int main() { int n; // 数组长度 cin >> n; // 输入第一个整数:n int a[100]; // 定义数组,n<100,所以最多100个元素 // 输入n个整数到数组 a[0] ~ a[n-1] for (int i = 0; i < n; i++) { cin >> a[i]; } // 第一步:从 a[0] ~ a[n-1] 中找最小值,与 a[0] 交换 int min_index = 0; // 假设第一个元素最小 for (int i = 1; i < n; i++) { if (a[i] < a[min_index]) { min_index = i; // 更新最小值下标 } } // 交换 a[0] 与最小值 if (min_index != 0) { int temp = a[0]; a[0] = a[min_index]; a[min_index] = temp; } // 第二步:从 a[1] ~ a[n-1] 中找最小值,与 a[1] 交换 min_index = 1; // 从第二个元素开始 for (int i = 2; i < n; i++) { if (a[i] < a[min_index]) { min_index = i; } } // 交换 a[1] 与这段的最小值 if (min_index != 1) { int temp = a[1]; a[1] = a[min_index]; a[min_index] = temp; } // 输出第二小的值,即 a[1] cout << a[1] << endl; return 0; } ``` ## 🔍 代码详解 ### 1️⃣ 变量与输入 - `int n;` 存储数组长度。 - `int a[100];` 因为题目说 `n<100`,所以开100个空间足够,注意这里下标从 `0` 开始。 - `cin >> n;` 读取第一行一个整数。 - `for (int i = 0; i < n; i++) cin >> a[i];` 读取第二行的 `n` 个整数。 ### 2️⃣ 找到最小值并交换 - 设定 `min_index = 0`,表示假设第一个元素最小。 - 循环从 `i=1` 到 `n-1`,发现更小的数就更新 `min_index`。 - 如果最小值不在第一个位置,则用临时变量 `temp` 交换两者。 ### 3️⃣ 找到第二小的值 - 此时数组第一个元素已经是最小值,我们从第二个元素(下标1)开始再找一次最小值。 - `min_index = 1`,然后循环从 `i=2` 到 `n-1` 查找。 - 找到后将它与 `a[1]` 交换。 - 最终 `a[1]` 就是**第二小的值**。 ### 4️⃣ 输出结果 - `cout << a[1] << endl;` 输出。 ## ⚠️ 注意点(常见陷阱) | 陷阱 | 说明 | |------|------| | **下标起始** | C++数组从0开始,题目描述的 `a[1]` 对应代码中的 `a[0]`,题目 `a[2]` 对应代码 `a[1]` | | **交换代码** | 只交换值,不要交换下标或指针,适合初学者 | | **重复数字** | 如果最小值有多个相同值,该方法仍然正确,第二次查找会找到另一个等于最小值的元素,此时输出仍为最小值(但题目通常要求第二小,即严格大于最小值,需注意题目要求) | | **只有一个数时** | 如果 `n == 1`,则没有第二小的值,题目保证 `n` 足够大吗?本例未处理,实际应加判断 | ## 💡 进阶建议 - **通用性**:如果要求输出全局第二小(不一定通过交换),可以用两个变量 `min1` 和 `min2` 在一次遍历中完成,效率更高。 - **稳定性**:如果你之后想做“排序所有数”,建议直接学习 `sort` 函数,一步到位。 - **代码规范**:养成变量名有意义的习惯,如 `minIndex` 而不是 `mi`,增强可读性。 --- ######[AI写代码神器 | 1089点数解答 | 2026-05-09 19:33:39]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]