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

C++实现数组最小值交换到首位的完整指南

根据你的描述,这是要求**将最小值放到第一个位置**,其余数字保持原始相对顺序不变(不是完整排序)。这是一个经典的“选择最小值并交换到首位”操作。 下面给出 **C++** 实现,并附详细解释。 --- ## 🧩 问题分析 - 输入:数组长度为 `n`,第二行是 `n` 个整数。 - 要求:找到最小值,将其与 `a[1]`(下标 0 位置)交换,**其他元素顺序不变**。 - 输出:交换后的 `n` 个整数,用空格分隔。 > 注意:这里只交换一次,不进行完整排序。例如样例中 `2` 是最小值,它与 `4` 交换,得到 `2 4 5 3 6`,其他数字顺序保持原样。 --- ## 💻 完整 C++ 代码 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取数组长度 int a[100]; // 题目给定 n < 100 for (int i = 0; i < n; i++) { cin >> a[i]; // 读取 n 个整数 } // 找到最小值的下标 int minIndex = 0; for (int i = 1; i < n; i++) { if (a[i] < a[minIndex]) { minIndex = i; } } // 将最小值与第一个元素交换 if (minIndex != 0) { int temp = a[0]; a[0] = a[minIndex]; a[minIndex] = temp; } // 输出结果 for (int i = 0; i < n; i++) { if (i > 0) cout << " "; cout << a[i]; } cout << endl; return 0; } ``` --- ## 📌 关键点说明 | 部分 | 说明 | |------|------| | **数组大小** | 使用 `int a[100]`,因为 `n < 100`,足够安全。 | | **找最小值** | 用 `minIndex` 记录最小值下标,初始为 0,遍历比较。 | | **交换判断** | 若 `minIndex != 0` 才交换,避免无意义的自身交换。 | | **输出格式** | 使用 `if (i > 0)` 控制空格,保证末尾无多余空格。 | --- ## 🛠 测试样例 **输入:** ``` 5 4 3 5 2 6 ``` **输出:** ``` 2 4 5 3 6 ``` **解释:** 最小值是 `2`(下标 3),与 `a[0]=4` 交换,其余顺序不变。 --- ## ⚠️ 常见问题与技巧 1. **题目要求“刚刚讲述的方法”** 很可能是指**选择排序的第一步(只做一轮选择)**,所以只需一次交换,不要写成完整排序。 2. **如果存在多个相同最小值** 只交换第一个遇到的即可(这里用 `<` 而非 `<=` 会保留最早的最小值位置)。 3. **输入规模较小** 可以直接用固定数组,不必动态分配,更简单安全。 4. **确保交换逻辑正确** 用临时变量 `temp` 完成交换,避免直接赋值导致数据丢失。 --- ## 💡 开发建议 - **注重边界情况**:当 `n=1` 时程序应正常工作(循环不执行,直接输出)。 - **代码风格**:命名清晰,加入必要注释,便于阅读维护。 - **测试覆盖**:可测试全正数、含负数、全相同数字等场景。 如需扩展为**完整选择排序**(不止一次交换),可将交换放入外层循环中,但本题只要求一次交换。 --- ######[AI写代码神器 | 877点数解答 | 2026-08-21 19:15:59]

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