基于两次选择排序求第二小值(Python实现)
根据您的描述,这里实际上是要**执行两次选择排序的部分步骤**,找到第二小的值。由于题目要求按照两次交换的方式实现,我们直接按此逻辑处理。 ### 🧠 思路分析 - 第一轮:从 a[1]~a[n] 中找到最小值,与 a[1] 交换; - 第二轮:从 a[2]~a[n] 中找到最小值,与 a[2] 交换; - 此时 a[2] 就是第二小的值。 这种方式类似选择排序前两步,但**不要求完全排序**。 ### 💻 参考代码(Python) ```python n = int(input()) arr = list(map(int, input().split())) # 注意:Python 下标从0开始,题目中a[1]对应arr[0] # 第一轮:找全局最小值,交换到位置0 min_idx = 0 for i in range(1, n): if arr[i] < arr[min_idx]: min_idx = i arr[0], arr[min_idx] = arr[min_idx], arr[0] # 第二轮:从下标1开始找最小值,交换到位置1 min_idx = 1 for i in range(2, n): if arr[i] < arr[min_idx]: min_idx = i arr[1], arr[min_idx] = arr[min_idx], arr[1] # 输出第二小值 print(arr[1]) ``` ### 🧪 运行示例 **输入:** ``` 5 4 3 5 2 6 ``` **过程:** - 初始:[4, 3, 5, 2, 6] - 第一轮找到最小值 2(下标3),交换到位置0 → [2, 3, 5, 4, 6] - 第二轮从下标1开始,找最小值为3(本身),无需交换 → [2, 3, 5, 4, 6] - 输出 arr[1] = 3 **输出:** `3` ✅ ### ⚠️ 边界情况与注意事项 - **n < 100**,但可能 **n < 2** 时,题目未明确约束,但逻辑上需要至少两个元素才能谈“第二小”。假设 n ≥ 2。 - **重复值问题**:如果数组中有重复的最小值(如 [1,1,2]),此算法仍能正确输出第二小值(2),因为第一次交换后,a[1] 仍是 1 情况不会发生——实际上第二次从下标1开始找最小,会忽略第一个最小值,得到下一个非最小(或同样最小但位置不同)。测试: - 输入:3 / 1 1 2 → 第一轮后 [1,1,2],第二轮从下标1找到最小1(下标1),交换后不变,输出 a[1]=1,但第二小应为1(正确)。 - **若题目要求输出严格第二小(即排除重复)**,则需额外处理,但根据题目描述,这里采用“按位置”方式实现,即允许重复值。 ### 📌 开发建议 - 此方法时间复杂度 O(n),空间 O(1)。 - 如果想用更通用的“不交换数组”方式,可直接两次遍历找最小和次小,但交换方法易于理解且符合题目提示。 - 实际开发中,可用 `sorted(arr)[1]` 快速实现,但这里主要考察排序思想。 ######[AI写代码神器 | 771点数解答 | 2026-08-21 19:27:22]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)624
- 超详细:JDK安装及Windows系统环境变量设置全攻略 (阿里通义 | 376点数解答 | 2024-03-06 17:27:29)430
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)563
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)571
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)562
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)508
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)549
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)639
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)510
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)477
- C++实现能量点闪点数量计算(字节豆包 | 173点数解答 | 2026-03-08 17:24:46)56
- 2 秒动画搞定!“好句子”如何稳停结束位置( | 456点数解答 | 2024-05-19 16:46:15)349