冒泡排序算法的基本思想:假设待排序长为n,从后往前两两比较相邻元素的值,如为逆序,则交换它们,直到序列比较完。我们称为一趟冒泡,结果将最小的元素交换到待排序列的第一个位置(关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”,这就是冒泡排序名字的由来)。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果把序列中最小元素放到了序列的最终位置,......,这样最多做n-1趟冒泡就能把所有的元素排序好。
冒泡排序的代码:
#include <iostream>
using namespace std;
void BubbleSort(int a[], int n)
{
for (int i = 0; i < n - 1; ++i)
{
bool flag = false; //表示本趟冒泡是否发生交换的标志
for (int j = n - 1; j > i; --j) //一趟冒泡的过程
{
if (a[j - 1] > a[j]) //若为逆序
{
flag = true;
swap(a[j - 1], a[j]); //交换
}
}
if (flag == false)
{
return; //本趟遍历后没有发生交换,说明表已经有序
}
}
}
int main()
{
int n = 8;
int a[20];
for (int i = 0; i < n; ++i)
{
cout << "Please enter a number : ";
cin >> a[i];
}
BubbleSort(a, n);
for (int i = 0; i < n; ++i)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
空间复杂度为O(1),最坏情况下时间复杂度为O(n^2),最好情况下(表中元素基本有序)时间复杂度为O(n),其平均时间复杂度为O(n^2)。
稳定性:冒泡排序是一个稳定的排序方法。