1.用C++编写起泡(冒泡)排序法,要求输入一串无序数据,输出一串排好序的数据: 例如输入:3 8 1 9 5 7 4 6 0 2,输出:0 1 2 3 4 5 6 7 8 9 并分析算法的时间复杂度和空间复杂度。
时间: 2024-09-13 20:10:33 浏览: 21
以下是用C++编写的一个简单的冒泡排序法实现,它可以接受一串无序数据,并输出一串排好序的数据:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int>& arr) {
bool swapped;
int n = arr.size();
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() {
vector<int> arr;
int num;
cout << "请输入一系列数字,以空格分隔:" << endl;
while (cin >> num) {
arr.push_back(num);
}
bubbleSort(arr);
cout << "排序后的数组:" << endl;
for (int num : arr) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
该程序首先读取一系列整数,然后调用`bubbleSort`函数进行排序。在排序过程中,该函数通过两层嵌套循环实现冒泡排序。每一轮遍历中,较大的元素会被“冒泡”到数组的末端。如果某一轮遍历中没有发生任何元素交换,说明数组已经是有序的,算法会提前结束以优化性能。
时间复杂度分析:
- 最佳情况(已经排序好的数组):时间复杂度为O(n),只需遍历一次数组。
- 最坏情况(反向排序的数组):时间复杂度为O(n^2),需要进行多次遍历和交换。
- 平均情况:时间复杂度通常认为是O(n^2)。
空间复杂度分析:
- 冒泡排序是一种原地排序算法,不需要额外的存储空间,空间复杂度为O(1)。