C++ 实现优化选择排序:从大到小排列输入整数
💻以下是使用 C++ 实现优化后的选择排序,将输入的 `n` 个数从大到小排序的代码: ```cpp #include <iostream> using namespace std; // 函数用于交换两个整数的值 void swap(int &a, int &b) { int temp = a; a = b; b = temp; } // 优化后的选择排序函数,从大到小排序 void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; ++i) { // 假设当前位置的元素是最大值 int maxIndex = i; // 从 i+1 到 n-1 寻找更大的元素 for (int j = i + 1; j < n; ++j) { if (arr[j] > arr[maxIndex]) { // 如果找到更大的元素,更新最大值的索引 maxIndex = j; } } // 如果最大值的索引不是当前位置 i,交换它们 if (maxIndex != i) { swap(arr[i], arr[maxIndex]); } } } int main() { int n; // 读取输入的整数 n,表示元素的数量 cin >> n; int arr[100]; // 读取 n 个整数到数组中 for (int i = 0; i < n; ++i) { cin >> arr[i]; } // 调用选择排序函数对数组进行排序 selectionSort(arr, n); // 输出排序后的数组元素,元素之间用空格分隔 for (int i = 0; i < n; ++i) { if (i > 0) { cout << " "; } cout << arr[i]; } cout << endl; return 0; } ``` ### 代码详细解释: #### 1. `swap` 函数 ```cpp void swap(int &a, int &b) { int temp = a; a = b; b = temp; } ``` - 该函数用于交换两个整数的值。通过引用传递参数,确保在函数内部对参数的修改会影响到原始变量。 #### 2. `selectionSort` 函数 ```cpp void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; ++i) { int maxIndex = i; for (int j = i + 1; j < n; ++j) { if (arr[j] > arr[maxIndex]) { maxIndex = j; } } if (maxIndex != i) { swap(arr[i], arr[maxIndex]); } } } ``` - **外层循环**:`for (int i = 0; i < n - 1; ++i)` 控制排序的轮数,总共需要进行 `n - 1` 轮排序。每一轮排序都会确定一个当前未排序部分的最大值,并将其放到正确的位置。 - **内层循环**:`for (int j = i + 1; j < n; ++j)` 用于在未排序的部分中寻找最大值的索引。从 `i + 1` 开始遍历到数组末尾,比较每个元素与当前最大值的大小,如果找到更大的元素,更新 `maxIndex`。 - **交换操作**:如果 `maxIndex` 不等于当前的 `i`,说明找到了更大的元素,调用 `swap` 函数交换 `arr[i]` 和 `arr[maxIndex]` 的位置。 #### 3. `main` 函数 ```cpp int main() { int n; cin >> n; int arr[100]; for (int i = 0; i < n; ++i) { cin >> arr[i]; } selectionSort(arr, n); for (int i = 0; i < n; ++i) { if (i > 0) { cout << " "; } cout << arr[i]; } cout << endl; return 0; } ``` - **输入部分**:首先读取一个整数 `n`,表示输入元素的数量。然后使用 `for` 循环读取 `n` 个整数到数组 `arr` 中。 - **排序部分**:调用 `selectionSort` 函数对数组进行排序。 - **输出部分**:使用 `for` 循环遍历排序后的数组,输出每个元素,元素之间用空格分隔。最后输出换行符。 ### 复杂度分析: - **时间复杂度**:选择排序的时间复杂度始终为 $O(n^2)$,因为无论输入数据的初始状态如何,都需要进行两层嵌套的循环。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间,主要用于存储临时变量。 ######[AI问答 | 1176点数解答 | 2026-04-11 19:30:42]
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)59
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)32
- 超详细:JDK安装及Windows系统环境变量设置全攻略 (阿里通义 | 376点数解答 | 2024-03-06 17:27:29)361
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)354
- 培训机构学员成绩与年龄更新:C++ 代码实现(DeepSeek | 186点数解答 | 2025-12-16 18:04:31)68
- Python 处理培训机构学员培训后年龄与 NOIP 成绩提升情况(DeepSeek | 73点数解答 | 2025-12-16 18:05:20)75
- 培训机构学员成绩提升:C++代码实现年龄与NOIP成绩更新(DeepSeek | 178点数解答 | 2025-12-31 12:20:24)70
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)62
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)322
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)335
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)331
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)337