C++ 实现优化选择排序从大到小排列输入数字
🔍以下是按照你提供的代码框架,完善后的代码及详细解释: ```cpp #include <iostream> using namespace std; int n, a[100]; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } // 选择排序过程 for (int i = 1; i <= n - 1; i++) { int maxj = i; // 内层循环,从 i+1 开始到 n 寻找最大值的索引 for (int j = i + 1; j <= n; j++) { // 如果当前元素 a[j] 大于当前记录的最大值 a[maxj] if (a[j] > a[maxj]) { // 更新最大值的索引为 j maxj = j; } } // 交换 a[i] 和 a[maxj] 的值 int t = a[i]; a[i] = a[maxj]; a[maxj] = t; } // 输出排序后的数组 for (int i = 1; i <= n; i++) { cout << a[i] << " "; } return 0; } ``` ### 代码详细解释: #### 1. 输入部分 ```cpp cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } ``` - 首先,程序从标准输入读取一个整数 `n`,它代表要排序的元素数量。 - 接着,使用 `for` 循环从标准输入读取 `n` 个整数,并将它们存储在数组 `a` 中,数组的索引从 `1` 开始。 #### 2. 选择排序部分 ```cpp for (int i = 1; i <= n - 1; i++) { int maxj = i; for (int j = i + 1; j <= n; j++) { if (a[j] > a[maxj]) { maxj = j; } } int t = a[i]; a[i] = a[maxj]; a[maxj] = t; } ``` - **外层循环**:`for (int i = 1; i <= n - 1; i++)` 控制排序的轮数。因为选择排序每一轮会确定一个最大值的位置,所以总共需要进行 `n - 1` 轮排序。 - **内层循环**:`for (int j = i + 1; j <= n; j++)` 用于在未排序的部分(从 `i + 1` 到 `n`)中寻找最大值的索引。`maxj` 初始化为 `i`,表示当前假设 `a[i]` 是最大值。 - **比较与更新**:在内层循环中,通过 `if (a[j] > a[maxj])` 比较当前元素 `a[j]` 和当前记录的最大值 `a[maxj]`。如果 `a[j]` 更大,则更新 `maxj` 为 `j`,表示找到了一个更大的值。 - **交换操作**:内层循环结束后,`maxj` 存储了未排序部分中最大值的索引。通过临时变量 `t`,交换 `a[i]` 和 `a[maxj]` 的值,将最大值放到当前未排序部分的第一个位置。 #### 3. 输出部分 ```cpp for (int i = 1; i <= n; i++) { cout << a[i] << " "; } ``` - 使用 `for` 循环遍历排序后的数组 `a`,并将每个元素输出,元素之间用空格分隔。 ### 复杂度分析: - **时间复杂度**:选择排序的时间复杂度为 $O(n^2)$,因为有两层嵌套的循环,外层循环执行 `n - 1` 次,内层循环的执行次数逐渐减少,但总体上时间复杂度是 $n$ 的平方级别。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间,主要用于存储临时变量 `t` 和索引 `maxj`。 ######[AI问答 | 1020点数解答 | 2026-04-11 19:31:22]
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)59
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)47
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)61
- 超详细:JDK安装及Windows系统环境变量设置全攻略 (阿里通义 | 376点数解答 | 2024-03-06 17:27:29)361
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)354
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)84
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)85
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)324
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)318
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)294
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)327
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)343