排序演算法之氣泡排序

2021-06-21 10:46:21 字數 1894 閱讀 9489

參考:

氣泡排序演算法的運作如下:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數c和記錄移動次數m均達到最小值。

所以,氣泡排序最好的時間複雜度為o(n) 。

若初始檔案是反序的,需要進行n2

趟排序。每趟排序要進行i

次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值。

氣泡排序的最壞時間複雜度為o(n2)。

綜上,因此氣泡排序總的平均時間複雜度為o(n2)。

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

1 #include2

3using

namespace

std;45

//氣泡排序

6void bubblesort(int iarr,intn)7

23}24if(!flag) //

如果沒有發生交換,說明已經有序!

25break;26

}27}28

intmain()29;

32 bubblesort(iarr,6

);33

for(int i = 0;i < 6; ++i)

3437 cout <38return0;

39 }

由於氣泡排序比較簡單,這裡不作過多介紹。但是值得注意的是:

1.在檔案狀態正序的情況下,氣泡排序的時間複雜度為o(n),按照我上面寫的**來說是沒問題的。我給了乙個標誌flag用來判斷在遍歷的過程中是否發生了交換,如果沒有的話說明檔案已經正序。但是有的書本上並不給乙個flag用來判斷,這樣的情況下,氣泡排序的時間複雜度無論如何都是o(n2).

2.氣泡排序是穩定的,當然,如果你將**以上**中的第16行中的》改為》=,那麼氣泡排序將不再穩定。而你也做了無用功,浪費cpu資源!

網上還有氣泡排序的公升級版:雙氣泡排序。由氣泡排序我們可知是將大的數冒泡冒到最後面。那麼顧名思義雙冒泡:將最大的數冒到最後面,同時將最小的數冒到最前面。能夠減少最外層迴圈的次數,從而減低複雜度,下面是我用c/c++實現的**:

1

//雙向氣泡排序

2void bubbledoublesort(int iarr,intn)3

19}20for(int k = n - i - 1; k >=i; --k) //

向左冒出最小的

2129}30

}31}32

intmain()33;

35 bubbledoublesort(iarr,6

);36

for(int i = 0;i < 6; ++i)

3740 cout <41return0;

42 }

雙向冒泡的複雜度分析:

1.如果檔案狀態是正序那麼時間複雜度是o(n).交換次數為0.

2.如果檔案狀態是逆序,交換次數是n2,時間複雜度依然是o(n).

看到上面的資料人們不禁要問,沒有什麼改進啊。但我們不要忘了,這是時間由於時間複雜度的計算方法而導致的。實際上,改進後的氣泡排序在平均情況下排序的趟數是氣泡排序的一半。

排序演算法之氣泡排序

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

排序演算法之氣泡排序

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

排序演算法之氣泡排序

原理 臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,一趟過去後,最大或最小的數字被交換到了最後一位,然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束。分析 1 時間複雜度 若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數 和記錄移動次數均達到最小值,所以,氣...