改进冒泡法,使之在新一轮比较中,若没有发生元素交换,则认为已排序完毕。用c++完整写出来
时间: 2024-03-25 09:36:52 浏览: 39
以下是改进后的冒泡排序算法的C++代码:
```c++
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n) {
bool swapped = true;
for (int i = 0; i < n-1 && swapped; 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;
}
}
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
在这个改进版本的冒泡排序算法中,我们引入了一个布尔型的变量swapped,来记录在一轮比较中是否发生了元素交换。在每一轮比较前,我们都将swapped设置为false,如果在比较过程中发生了元素交换,则将swapped设置为true。如果在一轮比较中没有发生任何元素交换,则说明数组已经有序,排序过程结束。
该算法的时间复杂度与普通冒泡排序一样,最坏情况下为O(n^2),最好情况下为O(n),平均情况下为O(n^2)。但是,在实际应用中,由于该算法可以在数组已经有序的情况下提前结束排序过程,因此效率要比普通冒泡排序高。
阅读全文