摘录《数据结构、算法与应用》中对冒泡排序的描述,及时间复杂度分析
我的C++实现:
#include <iostream>
using namespace std;
// 单次冒泡:比较数组a[]的前n个数,从左到右两两比较,将最大值移到序列右端
template<class T>
void bubble(T a[], int n) {
T temp;
for (int i = 1; i < n; i++) {
if (a[i - 1] > a[i]) {
temp = a[i - 1];
a[i - 1] = a[i];
a[i] = temp;
}
}
}
// 对数组整个儿,进行n-1次冒泡排序
template<class T>
void bubblesort(T a[], int n) {
for (int i = n; i > 0; i--) {
bubble(a, i);
}
}
// 测试
int main() {
double a[5] = { 1.2, 4.2, 3.2, 2,2 };
bubblesort(a, 5);
for (int i = 0; i < 5; i++) {
cout << a[i] << "\t";
}
}
升级版的冒泡:“及时终止的冒泡程序 ”
在bubble函数中,记录是否进行了交换,如果没有进行交换,说明整个数组已经排好序了,就退出bubblesort。
#include <iostream>
using namespace std;
// 单次冒泡:比较数组a[]的前n个数,从左到右两两比较,将最大值移到序列右端
template<class T>
bool bubble(T a[], int n) {
T temp;
bool bswapped = false;
for (int i = 1; i < n; i++) {
if (a[i - 1] > a[i]) {
temp = a[i - 1];
a[i - 1] = a[i];
a[i] = temp;
bswapped = true;// *new
}
}
return bswapped;
}
// 对数组整个儿,进行n-1次冒泡排序
template<class T>
void bubblesort(T a[], int n) {
bool sorted = true;// *new
for (int i = n; i > 0 && sorted; i--) {
sorted = bubble(a, i);// *new
}
}
// 测试
int main() {
double a[5] = { 1.2, 4.2, 3.2, 2,2 };
bubblesort(a, 5);
for (int i = 0; i < 5; i++) {
cout << a[i] << "\t";
}
}