C 排序演算法之氣泡排序

2021-08-03 18:50:58 字數 1345 閱讀 5573

氣泡排序

思想:通過一系列的「交換」動作完成。首先第乙個記錄和第二個記錄比較,如果第乙個大,則二者交換,否則不交換;然後第二個記錄和第三個記錄比較,如果第二個大,則二者交換,否則不交換..........一直按這種方式進行下去,最終最大的那個記錄被交換到了最後,一趟氣泡排序完成。這個過程中,大的記錄像一塊石頭一樣「沉底」,小的記錄逐漸向上「浮動」,氣泡排序的名字由此而來。

例如: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 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...