C++选择排序去重并降序输出颜色编号实现
好的,我们来分析一下这个问题,并提供C++代码实现。 ## 📌 问题分析 - 输入:第一行是整数 `n`,第二行是 `n` 个整数(颜色值)。 - 要求:**去重**后,按**从大到小**排序输出。 - 提示使用**选择排序**,排好后扫描相邻元素,相同则跳过(去重)。 ## ✨ 解题步骤 1. **读取输入**:读取 `n` 和数组。 2. **选择排序(从大到小)**: - 对每个位置 `i`,在剩余的 `[i, n-1]` 中找出最大元素的下标 `maxIdx`。 - 若 `maxIdx != i`,交换。 3. **去重输出**: - 从前往后遍历排好序的数组,若当前元素与前一个元素不同,则输出(首元素直接输出)。 ## 💻 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int arr[100]; // 读取颜色 for (int i = 0; i < n; i++) { cin >> arr[i]; } // 选择排序(从大到小) for (int i = 0; i < n - 1; i++) { int maxIdx = i; for (int j = i + 1; j < n; j++) { if (arr[j] > arr[maxIdx]) { maxIdx = j; } } // 交换 int tmp = arr[i]; arr[i] = arr[maxIdx]; arr[maxIdx] = tmp; } // 去重输出 bool first = true; for (int i = 0; i < n; i++) { // 跳过重复(和前一个相同) if (i > 0 && arr[i] == arr[i - 1]) { continue; } if (!first) { cout << " "; } cout << arr[i]; first = false; } cout << endl; return 0; } ``` ## 🧪 测试示例 输入: ``` 8 3 3 2 7 7 7 6 8 ``` 输出: ``` 8 7 6 3 2 ``` ## 🔍 关键点解释 - **选择排序**:每次选出剩余部分的最大值放到前端,时间复杂度 `O(n²)`,适合 `n<100` 的小数据。 - **去重**:因为已排序,重复元素一定相邻,所以只需比较当前元素与前一个元素即可。 - **注意边界**:`i>0` 时才有前一个元素,因此保留首元素。 ## ⚠️ 常见陷阱 - 若使用其他排序(如冒泡)也可,但必须保证排序正确,否则去重逻辑会出错。 - 输出格式:数字间用空格,末尾无多余空格(已在代码中处理)。 ## 📚 建议 - 如果数据量较大(如 `n>10000`),建议改用 `std::sort`(快速排序)来提升性能。 - 可以扩展使用 `std::set` 或 `std::unique` 简化去重,但本题要求手写排序,故按提示实现。 ######[AI写代码神器 | 755点数解答 | 2026-08-28 19:03:39]
- Python 实现赛车手积分排名:从数据到清晰榜单(字节豆包 | 182点数解答 | 2024-10-20 16:16:44)351
- 给定一个包含 个顶点和 条边的无向连通图。如果除了最多一个顶点外,其余所有顶点的度数均为 或 (即不超过一个顶点的度数大于 ),则称其为胡须图。顶点的度数表示和该顶点相连的边的数量。 每条边要么是黑色,要么是白色。所有边初始均为黑色。 现给定一张胡须图的描述,你需要处理下列类型的若干操作: 将编号为 的边涂成黑色。编号 的边指输入顺序的第 条边。保证进行该操作时第 条边是白色。 将编号为 的边涂成白色。保证进行该操作时第 条边是黑色。 查询只经过黑色边,顶点 和 间的最短路径长度,或判断是否不存在这样的路径(路径长度为经过的边数)。 顶点从 到 编号,边从 到 编号。 输入格式 输入的第一行包含一个整数 ( )——图的顶点数。接下来 行,每行两个整数 ( ),表示一条边。保证图连通、是胡须图、无自环、无重边。 之后一行为整数 ( )——操作数。接下来 行,每行为一次操作。每次操作格式如下: 若为操作类型 ,则该行为 1 i,表示将编号为 的边涂为黑色。 若为操作类型 ,则该行为 2 i,表(讯飞星火 | 0点数解答 | 2026-05-30 13:01:05)74
- 超详细:JDK安装及Windows系统环境变量设置全攻略 (阿里通义 | 376点数解答 | 2024-03-06 17:27:29)434
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)571
- Python匈牙利算法:求解二分图最大匹配边数(含代码及详细解析)(字节豆包 | 715点数解答 | 2025-12-12 18:44:19)124
- 二分图最大匹配边数求解:从输入到代码实现全解析(字节豆包 | 275点数解答 | 2025-12-13 21:24:15)137
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)483
- C++实现二进制转八进制及旋律类型判断(字节豆包 | 629点数解答 | 2026-03-21 19:50:41)90
- C++ 实战:交通工具基类与小汽车类的继承实现及测试(字节豆包 | 391点数解答 | 2024-09-18 16:16:39)335
- Java 实现交通工具类继承:从 Vehicles 到 Car 的完整示例(字节豆包 | 289点数解答 | 2024-09-18 16:16:54)318
- Java 继承实战:交通工具与小汽车类的定义与测试(字节豆包 | 293点数解答 | 2024-09-18 21:36:23)418
- Java实战:交通工具与小汽车类定义及测试全解析(字节豆包 | 290点数解答 | 2024-09-18 21:39:01)400