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

C++实现最小值前置的数组重排算法

根据题目描述,我们需要将数组中的最小值放到 `a[1]` 位置,其余数字保持原顺序(即除了最小值被移到第一个位置,其他元素按原相对顺序依次排列)。样例中 `4 3 5 2 6` 的最小值是 `2`,将其移到首位后,其余元素 `4 3 5 6` 保持原序,所以输出 `2 4 5 3 6`。 ## 🧠 解题思路 题目要求使用一种“方法”(可能是冒泡排序或其他),但本质上只需要: 1. **找到最小值**及其下标。 2. **将最小值与第一个元素交换**(或者取出最小值插入到最前面,其余元素右移一位)。 3. **输出整个数组**。 ## 💻 C++ 实现(推荐) ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } // 找到最小值和它的下标 int min_val = a[0]; int min_idx = 0; for (int i = 1; i < n; i++) { if (a[i] < min_val) { min_val = a[i]; min_idx = i; } } // 将最小值放到 a[0](相当于 a[1]),其余元素保持原序后移 // 方法:将最小值前的所有元素向右移一位,然后把最小值放到开头 // 注意:这里下标从0开始,对应题目中的a[1]到a[n] for (int i = min_idx; i > 0; i--) { a[i] = a[i - 1]; } a[0] = min_val; // 输出结果 for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; return 0; } ``` ## 📌 代码解释 - **输入处理**:使用 `vector<int>` 动态存储数组,避免固定大小限制。 - **查找最小值**:遍历一次,记录最小值和对应下标。 - **移位操作**:从最小值所在位置开始,将其前面的每个元素向后移动一位,最终将最小值放在 `a[0]`。 - **时间复杂度**:O(n),只需两次遍历(查找最小值 + 移位)。 - **空间复杂度**:O(1),仅使用常数额外空间。 ## 🧪 测试样例 输入: ``` 5 4 3 5 2 6 ``` 输出: ``` 2 4 5 3 6 ``` 与题目样例一致。 ## ⚠️ 注意事项 - 下标从0开始,但题目描述下标从1开始,需注意转换。 - 如果存在多个相同的最小值,取**第一个**最小值即可,通常不影响结果。 - 本方法无需排序,只做一次“移动”,效率高。 ## 📚 扩展思考 如果题目要求更复杂的操作(例如将最小值放到第一个,其余数字按升序排列),则需要使用排序算法(如快速排序、冒泡排序等)。但本题仅要求移位,因此上述解法最优。 ######[AI写代码神器 | 735点数解答 | 2026-08-21 19:16:50]

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