冒泡排序大概是人們能想到的最簡單的排序算法了,它的基本思想就是從後向前依次把小的數交換上來,就像氣泡不斷的冒出水面一樣,因此而得名。冒泡排序的時間複雜度爲O(n^2),是一種穩定的排序方法
//冒泡排序算法
void BubbleSort(int H[],int length)
{
int i = 0;
int j = 0;
int flag = 1; //定義開關,提高冒泡排序性能
for (i = 1; i < length && flag; i++) //從第一個數開始和後面的進行比較
{
flag = 0;
for (j = length - 2; j >= i; j--) { //因爲有j+1的存在所以j從倒數第二個數開始向前
if(H[j + 1] < H[j])
{
swap(H, j + 1, j);
flag = 1; //當沒有數據交換的時候就跳出循環
}
}
}
}
最好的情況就是數據本身就有序,當我們比較n -1 次後發現沒有數據交換,則跳出循環,時間複雜度爲O(n)
最壞的情況是排序出現逆序即從小到大排列的時候,這時需要交換的次數爲1+2+3+...+(n-1) = n(n-1)/2
因此時間複雜度爲O(n^2)