酷代码 AI
菜单
服务商

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++) { bool swapped = false; for (int j = 0; j < n - i - 1; j++) { if (arr[j] < arr[j + 1]) { // 交换 arr[j] 和 arr[j+1] int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true; } } // 如果没有发生交换,说明数组已经有序,提前结束排序 if (!swapped) { break; } } // 输出排序后的数组 for (int i = 0; i < n; i++) { if (i > 0) { cout << " "; } cout << arr[i]; } cout << endl; return 0; } ``` ### 💡代码解释 1. **输入处理**:首先读取一个整数 `n`,表示数组的长度,然后读取 `n` 个整数存储在数组 `arr` 中。 2. **优化的冒泡排序**: - 使用两层循环,外层循环控制排序的轮数,内层循环比较相邻的元素。 - 如果相邻元素顺序错误(前一个元素小于后一个元素),则交换它们的位置,并设置标志位 `swapped` 为 `true`。 - 如果某一轮没有发生交换,说明数组已经有序,提前结束排序。 3. **输出结果**:遍历排序后的数组,输出每个元素,相邻元素之间用空格隔开。 ### ⚙️复杂度分析 - **时间复杂度**:平均和最坏情况下为 $O(n^2)$,最好情况下为 $O(n)$(数组已经有序)。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。 ### 🚀开发建议 - **代码可读性**:使用有意义的变量名和注释,提高代码的可读性。 - **错误处理**:可以添加输入验证,确保输入的 `n` 在合法范围内。 - **性能优化**:对于大规模数据,冒泡排序效率较低,可以考虑使用更高效的排序算法,如快速排序、归并排序等。 ######[AI写代码神器 | 696点数解答 | 2026-05-16 20:52:41]

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