氣泡排序
思想:通過一系列的「交換」動作完成。首先第乙個記錄和第二個記錄比較,如果第乙個大,則二者交換,否則不交換;然後第二個記錄和第三個記錄比較,如果第二個大,則二者交換,否則不交換..........一直按這種方式進行下去,最終最大的那個記錄被交換到了最後,一趟氣泡排序完成。這個過程中,大的記錄像一塊石頭一樣「沉底」,小的記錄逐漸向上「浮動」,氣泡排序的名字由此而來。
例如:3 6 4 2 1 8 5 7
下面進行第一趟氣泡排序:假設陣列下標從0開始
(1) 0號和1號比較,3<6,不交換
結果:3 6 4 2 1 8 5 7
(2) 1號和2號比較,6>4,交換
結果:3 4 6 2 1 8 5 7
(3) 2號和3號比較,6>2,交換
結果:3 4 2 6 1 8 5 7
(4) 3號和4號比較,6>1,交換
結果:3 4 2 1 6 8 5 7
(5) 4號和5號比較,6<8,不交換
結果:3 4 2 1 6 8 5 7
(6) 5號和6號比較,8>5,交換
結果:3 4 2 1 6 5 8 7
(7) 6號和7號比較,8>7,交換
結果:3 4 2 1 6 5 7 8
一趟氣泡排序,最大的8被交換到了最後,8到達了它最後的位置。接下來按照同樣的方法進行第二趟氣泡排序。經過若干趟後,最終序列有序。注意,氣泡排序演算法結束的條件是在一趟排序過程中沒有發生元素交換。
#include #include using namespace std;
//氣泡排序法,時間複雜度最壞o(n*n),最好o(n),平均時間複雜度為o(n*n);空間複雜度為o(1)
void bubblesort(vector&r)
} if (flag == 0) //一趟排序過程中沒有發生元素交換,證明序列有序,排序結束
return; }}
void main()
; bubblesort(r);
for (auto x: r)
cout << x << " ";
cout << endl;
}
輸出結果:
複雜度分析:
(1)時間複雜度:
(2)空間複雜度
需要額外輔助空間只有乙個temp,因此空間複雜度為o(1)。
C語言 排序演算法之氣泡排序
氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。維基百科 氣泡排...
排序演算法之氣泡排序(C語言)
我們採用傳統的三段式思維來學習 是什麼?為什麼?怎麼做?氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就...
C語言排序演算法之氣泡排序
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...