排序演算法之氣泡排序

2021-08-19 06:20:59 字數 1281 閱讀 2341

題目:給出如下一段序列 ,請你從小到大進行排序。

還是小白的我一直使用迴圈遍歷進行比較交換,這樣的排序演算法效率十分低,所以開始學習幾個經典的排序演算法。

首先給出未學習排序演算法前一直使用的排序**(c++實現):

void oldsort(vector&v)		

} }}

氣泡排序 -> 一種交換排序

氣泡排序的時間複雜度為 o(n^2)

基本思想:倆倆比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。

**實現:

void bubblesort(vector&v)		//氣泡排序

} //寫法二:

//for (int j = v.size() - 1; j > i; --j) //尤其注意越界問題

////}

} cout << "bubblesort: ";

for (const auto &n : v)    //列印出排序後的序列

}

測試程式:(vs環境下)

#include #include using namespace std;

int main()

; bubblesort(v);

system("pause");

return 0;

}

執行結果:

bubblesort:  1 2 3 5 7 9

氣泡排序的優化  

乙個序列中可能會有一些元素已經排好序了,這樣進行比較顯然是降低效率的,沒有任何資料交換,這就說明此序列已經有序,不需要在繼續後面的迴圈工作了。我們需要改進一下**,增加乙個標記變數flag來實現這一演算法的改進。

改進後的氣泡排序 當未完成迴圈時已經排好序時,不必再繼續執行不必要的迴圈:

void bubblesort_s(vector&v)		//改進後的氣泡排序 當未完成迴圈時極影排好序時,不必在繼續執行不必要的迴圈

} }cout << "bubblesort_s: ";

for (const auto &n : v)

}

綜上為我學習氣泡排序後,自己手擼的**,如有錯誤,希望指正。

上述**均為c++實現,範圍for語句為c++11特性,寫的排序演算法傳入的引數用的是 vector,目的是為了讓自己熟練使用容器。

排序演算法之氣泡排序

參考 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。若...

排序演算法之氣泡排序

對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...

排序演算法之氣泡排序

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...