1. 程式人生 > >排序--氣泡排序

排序--氣泡排序

按照由小到大的順序排列,氣泡排序基本步驟:

1、比較相鄰兩個數值的大小,將數值大的交換到數值小的後面,資料交換的時候需要1個臨時變數空間;

2、對剩下的n-1個數值重複1的步驟,直到剩下的數值個數為1。

比如5,4,3,2,1的排序步驟如下:

第一遍:4、5、3、2、1;    4、3、5、2、1;    4、3、2、5、1;    4、3、2、1、5

第二遍:3、4、2、1、5;    3、2、4、1、5;    3、2、1、4、5

第三遍:2、3、1、4、5;    2、1、3、4、5

第四遍:1、2、3、4、5

時間複雜度為:

 

當資料本身有序時如1、2、3、4、5,可以在以上的步驟進行優化,即在第一遍過程中發現沒有資料發生交換就可以判斷資料已經有序,此時的時間複雜度為N-1。由於在絕大部分情況下,給定的資料很少是已經有序的,所以氣泡排序的平均時間複雜度是N*(N-1)/2

這裡並沒有用大O表示法,因為在實際的排序演算法中,當資料個數到一定程度時會使用其它排序演算法,比如在lucene中IntroSorter下,元素個數達到20的時候用二分插入排序,至於這個20是怎麼來的,個人認為只有把完整的時間複雜度公式表達出來才能求出。

氣泡排序演算法是穩定的,因為當資料相同時不會發生位置交換。