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

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]

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