冒泡排序代码c++(冒泡排序代码js)

## 冒泡排序算法 C++ 实现### 简介冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历要排序的列表,比较相邻的元素,如果它们的顺序错误就把它们交换过来。重复地执行这一步骤,直到没有再需要交换的元素,说明列表已经排好序。### 算法步骤1.

比较相邻元素:

从列表的第一个元素开始,比较每一对相邻元素。如果第一个元素比第二个元素大,就交换它们。 2.

重复遍历:

对每一对相邻元素重复步骤 1,直到列表的倒数第二个元素。每一次遍历都会将最大的元素“冒泡”到列表的末尾。 3.

缩小范围:

由于每一次遍历都会将最大的元素放到正确的位置,因此下一次遍历可以忽略已经排好序的元素。 4.

重复步骤 2 和 3:

重复步骤 2 和 3,直到整个列表排好序。### C++ 代码实现```c++ #include using namespace std;void bubbleSort(int arr[], int n) {bool swapped;for (int i = 0; i < n - 1; i++) {swapped = false;for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr[j], arr[j + 1]);swapped = true;}}// 如果一次遍历没有发生交换,说明数组已经有序,可以提前退出if (!swapped) {break;}} }int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);cout << "排序前的数组: \n";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}bubbleSort(arr, n);cout << "\n排序后的数组: \n";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}cout << endl;return 0; } ```### 代码解释1.

`bubbleSort` 函数:

接收一个整数数组 `arr` 和数组长度 `n` 作为参数。

使用两个嵌套循环实现冒泡排序。

外层循环控制遍历次数,内层循环比较相邻元素并交换。

`swapped` 变量用于标记一次遍历是否发生交换,如果没有发生交换,说明数组已经有序,可以提前退出循环。2.

`main` 函数:

定义一个整数数组 `arr` 并初始化。

使用 `sizeof` 运算符计算数组长度。

打印排序前的数组。

调用 `bubbleSort` 函数对数组进行排序。

打印排序后的数组。### 复杂度分析

时间复杂度:

最佳情况:O(n) - 当数组已经有序时,只需要遍历一次,不需要交换。

平均情况:O(n^2)

最坏情况:O(n^2) - 当数组逆序时,需要进行最多次的比较和交换。

空间复杂度:O(1) - 只是使用了常数级别的额外空间。### 总结冒泡排序算法简单易懂,实现方便,但效率较低,时间复杂度较高,不适合处理大量数据。在实际应用中,通常使用更高效的排序算法,例如快速排序、归并排序等。

冒泡排序算法 C++ 实现

简介冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历要排序的列表,比较相邻的元素,如果它们的顺序错误就把它们交换过来。重复地执行这一步骤,直到没有再需要交换的元素,说明列表已经排好序。

算法步骤1. **比较相邻元素:** 从列表的第一个元素开始,比较每一对相邻元素。如果第一个元素比第二个元素大,就交换它们。 2. **重复遍历:** 对每一对相邻元素重复步骤 1,直到列表的倒数第二个元素。每一次遍历都会将最大的元素“冒泡”到列表的末尾。 3. **缩小范围:** 由于每一次遍历都会将最大的元素放到正确的位置,因此下一次遍历可以忽略已经排好序的元素。 4. **重复步骤 2 和 3:** 重复步骤 2 和 3,直到整个列表排好序。

C++ 代码实现```c++

include using namespace std;void bubbleSort(int arr[], int n) {bool swapped;for (int i = 0; i < n - 1; i++) {swapped = false;for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr[j], arr[j + 1]);swapped = true;}}// 如果一次遍历没有发生交换,说明数组已经有序,可以提前退出if (!swapped) {break;}} }int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);cout << "排序前的数组: \n";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}bubbleSort(arr, n);cout << "\n排序后的数组: \n";for (int i = 0; i < n; i++) {cout << arr[i] << " ";}cout << endl;return 0; } ```

代码解释1. **`bubbleSort` 函数:** * 接收一个整数数组 `arr` 和数组长度 `n` 作为参数。* 使用两个嵌套循环实现冒泡排序。* 外层循环控制遍历次数,内层循环比较相邻元素并交换。* `swapped` 变量用于标记一次遍历是否发生交换,如果没有发生交换,说明数组已经有序,可以提前退出循环。2. **`main` 函数:*** 定义一个整数数组 `arr` 并初始化。* 使用 `sizeof` 运算符计算数组长度。* 打印排序前的数组。* 调用 `bubbleSort` 函数对数组进行排序。* 打印排序后的数组。

复杂度分析* 时间复杂度:* 最佳情况:O(n) - 当数组已经有序时,只需要遍历一次,不需要交换。* 平均情况:O(n^2) * 最坏情况:O(n^2) - 当数组逆序时,需要进行最多次的比较和交换。 * 空间复杂度:O(1) - 只是使用了常数级别的额外空间。

总结冒泡排序算法简单易懂,实现方便,但效率较低,时间复杂度较高,不适合处理大量数据。在实际应用中,通常使用更高效的排序算法,例如快速排序、归并排序等。

标签列表