排序--氣泡排序
阿新 • • 發佈:2018-11-26
按照由小到大的順序排列,氣泡排序基本步驟:
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是怎麼來的,個人認為只有把完整的時間複雜度公式表達出來才能求出。
氣泡排序演算法是穩定的,因為當資料相同時不會發生位置交換。